Appendix overview
In this appendix, I report additional exploratory analyses of the organization of the sets of “conceptual units” that were excluded from the main text of Chapter IV, including: (a) Visualizations and analyses of the relationships among conceptual units using scales derived from EFA of children’s own responses, rather than adults’ responses, for 7- to 9-year-old children in Study 3, 4- to 6-year-old children in Study 3, and 4- to 5-year-old children in Study 4; (b) Visualizations and analyses of age-related changes in difference scores between conceptual units (scored using adults’ scales) for 7- to 9-year-old children in Study 2, 4- to 9-year-old children in Study 3, and 4- to 5-year-old children in Study 4; and (c) Visualizations of the joint dependency of HEART on both BODY and MIND.
Relationships among conceptual units using scales derived from children’s EFAs
In Chapter IV, I used adults’ EFA solution to construct BODY, HEART, and MIND scales and used these scales to assess the organization of these adult-like conceptual units among both adult and child samples. For Study 2, I also used 7- to 9-year-old children’s own EFA solution to construct a separate set of scales based on children’s own conceptual units and conducted a separate set of analyses of the organization of these “child-like” conceptual units. Here I present a parallel set of analyses using children’s own EFA solutions (rather than adults’) to assess the organization of conceptual units among both older children (7-9y of age) and younger children (4-6y of age) in Study 3, as well as among children (4-5y of age) in Study 4.
Study 3
Older children (7-9y), using their own scales
Scale construction
Following the steps described in “General analysis plan,” above, yielded BODY, HEART, and MIND scales of 6 items each; see Table B.1.
Visualization and analysis of asymmetries
Visualizations of relationships among 7- to 9-year-old children’s scores on the BODY, HEART, and MIND scales are provided in Figure B.xx, row A. The results of Bayesian regressions comparing difference scores between conceptual units to zero, controlling for differences in assessments of the nine “diverse characters” that were featured as target characters in these studies, are provided in Table B.xx.
On the whole, these results (using BODY, HEART, and MIND scales derived from EFA 7- to 9-year-old children’s responses) are very similar to those presented in the main text of Chapter IV (using adults’ BODY, HEART, and MIND scales): Children systematically endorsed BODY and MIND items more strongly than HEART items, but showed no systematic asymmetry between BODY and MIND. This is unsurprising, since children’s and adults’ scales were so similar to each other (see Table B.xx).
Younger children (4-6y), using their own scales (three-factor solution)
Scale construction
Following the steps described in “General analysis plan,” above, yielded BODY*, HEART*, and MIND scales of 5 items each; see Table B.1.
Visualization and analysis of asymmetries
Visualizations of relationships among 4- to 6-year-old children’s scores on the BODY*, HEART*, and MIND scales are provided in Figure B.xx, row B. The results of Bayesian regressions comparing difference scores between conceptual units to zero, controlling for differences in assessments of the nine “diverse characters” that were featured as target characters in these studies, are provided in Table B.xx.
As in the results presented in the main text of Chapter IV (using adults’ BODY, HEART, and MIND scales), 4- to 6-year-old children systematically endorsed BODY* items more strongly than MIND items. This is further evidence of a markedly un-adult-like intuition that BODY may be a more basic conceptual unit than MIND.
In contrast to the results presented in the main text of Chapter IV, 4- to 6-year-old children’s BODY* vs. HEART* difference scores were indistinguishable from zero, and they systematically endorsed HEART* items more strongly than MIND items. Both of these observations render 4- to 6-year-old children’s conceptual organizations even less adult-like than those reported in Chapter IV.
Younger children (4-6y), using their own scales (two-factor solution)
Scale construction
Following the steps described in “General analysis plan,” above, yielded BODY-HEART and MIND scales of 6 items each; see Table B.1.
Visualization and analysis of asymmetries
Visualizations of relationships among 4- to 6-year-old children’s scores on the BODY-HEART and MIND scales are provided in Figure B.xx, row B. The results of a Bayesian regression comparing difference scores between conceptual units to zero, controlling for differences in assessments of the nine “diverse characters” that were featured as target characters in these studies, are provided in Table B.xx.
The main take-away of this analysis is that 4- to 6-year-old children reliably endorsed BODY-HEART items more strongly than MIND items.
Discussion
Table B.1: Scales for each of the conceptual units (factors) identified by EFA for US Adults, older children, and younger children in Study 3 (see Chapter III). For younger children, this includes scales for both three- and two-factor EFA solutions. A checkmark indicates that a mental capacity was included in a scale for a particular sample. The conceptual units of younger children differed substantially from those of older children and adults, such that some mental capacities were included in different scales across age groups (e.g., feel scared was part of the BODY scale for older children and adults, but part of the HEART* scale for younger children). In these cases, the name of the scale is provided (rather than a checkmark).
|
Younger children, 4-6y |
| Capacity |
Adults |
Older children, 7-9y |
3-factor solution |
2-factor solution |
| BODY scale |
| feel pain |
✓ |
✓ |
|
|
| get hungry |
✓ |
✓ |
✓ |
BODY-HEART |
| feel tired |
✓ |
✓ |
✓ |
|
| smell things |
✓ |
✓ |
✓ |
|
| feel scared |
✓ |
✓ |
HEART* |
|
| feel sick... |
✓ |
|
|
BODY-HEART |
| get angry |
|
✓ |
✓ |
BODY-HEART |
| HEART scale |
| feel happy |
|
|
✓ |
BODY-HEART |
| feel guilty |
✓ |
✓ |
MIND |
MIND |
| get hurt feelings |
✓ |
✓ |
BODY* |
|
| feel embarrassed |
✓ |
✓ |
✓ |
|
| feel proud |
✓ |
✓ |
✓ |
BODY-HEART |
| feel love |
✓ |
✓ |
✓ |
|
| feel sad |
✓ |
✓ |
|
BODY-HEART |
| MIND scale |
| sense...far away |
✓ |
✓ |
✓ |
✓ |
| sense temperatures |
✓ |
✓ |
✓ |
✓ |
| figure out how to do things |
✓ |
✓ |
✓ |
✓ |
| be aware of things |
✓ |
✓ |
|
|
| remember things |
✓ |
✓ |
✓ |
✓ |
| make choices |
✓ |
✓ |
|
✓ |


Study 4
Younger children (4-6y), using their own scales (three-factor solution)
Scale construction
Following the steps described in “General analysis plan,” above, yielded BODY, HEART, and MIND scales of 3 items each; see Table B.1.
Visualization and analysis of asymmetries
Visualizations of relationships among 4- to 6-year-old children’s scores on the BODY, HEART, and MIND scales are provided in Figure B.xx, row A. The results of Bayesian regressions comparing difference scores between conceptual units to zero, controlling for differences in assessments of the two “edge cases” that were featured as target characters in these studies, are provided in Table B.xx.
In these regressions, none of the asymmetries between conceptual units were reliably distinguishable from zero.
Younger children (4-6y), using their own scales (four-factor solution)
Scale construction
Following the steps described in “General analysis plan,” above, yielded BODY (nausea), BODY (other), HEART*, and MIND* scales of 3 items each; see Table B.1.
Visualization and analysis of asymmetries
Visualizations of relationships among 4- to 6-year-old children’s scores on the BODY*, HEART*, and MIND scales are provided in Figure B.xx, row B. The results of Bayesian regressions comparing difference scores between conceptual units to zero, controlling for differences in assessments of the nine “diverse characters” that were featured as target characters in these studies, are provided in Table B.xx.
The main take-aways of this analysis are that 4- to 6-year-old children reliably endorsed BODY (other) items more strongly than any other items, but showed no reliable asymmetries between the remaining conceptual units (BODY (nausea), HEART*, and MIND).
Discussion
Table B.3: Scales for each of the conceptual units (factors) identified by EFA for US Adults and younger children in Study 4 (see Chapter III). For younger children, this includes scales for both three- and four-factor EFA solutions. A checkmark indicates that a mental capacity was included in a scale for a particular sample. The conceptual units of younger children in the four-factor solution differed substantially from those of adults, such that some mental capacities were included in different scales across age groups. In these cases, the name of the scale is provided (rather than a checkmark).
|
Younger children, 4-6y |
| Capacity |
Adults |
3-factor solution |
4-factor solution |
| BODY scale |
| get thirsty |
✓ |
✓ |
BODY (other) |
| feel hungry |
✓ |
✓ |
BODY (other) |
| smell things |
✓ |
✓ |
BODY (nausea) |
| feel tired |
✓ |
|
BODY (nausea) |
| feel sick |
✓ |
|
BODY (nausea) |
| HEART scale |
| love someone |
✓ |
✓ |
MIND* |
| get sad |
✓ |
|
✓ |
| hate someone |
✓ |
|
|
| feel sorry |
✓ |
✓ |
✓ |
| get lonely |
✓ |
✓ |
✓ |
| MIND scale |
| figure things out |
✓ |
|
|
| remember things |
✓ |
✓ |
✓ |
| know stuff |
✓ |
✓ |
✓ |
| think |
✓ |
✓ |
|
| hear |
✓ |
|
BODY (other) |


The joint dependency of HEART on both BODY and MIND
A particularly robust and reliable finding reported in the main text of Chapter IV was that US adults virtually never endorsed HEART more strongly than either BODY or MIND. (US children between the ages of 4-9y also demonstrated increasingly adult-like asymmetries in their BODY, HEART, and MIND attributions with age.) I argued in that chapter that this pattern of findings is consitent with the possibility that adults’ mental capacity attributions are governed by an intuitive theory of mental life specifying that, in order for a being to have the social-emotional abilities of the HEART, it must also have the physiological sensations of the BODY and the perceptual-cognitive abilities of the mind.
Here, I provide some preliminary evidence for the “and” in that claim, by way of a re-visualization of participants’ BODY, HEART, and MIND scores. The logic here is that if, as a group, a sample of participants holds the theory that HEART requires a combination of BODY and MIND, then strong endorsements of HEART abilities (depicted here in oranges and reds) should only occur among participants who also gave strong endorsements of both BODY and MIND abilities (plotted here in the upper right corner of each plot).
This is, indeed, what I observe among adults across Studies 1-4 (see Figure B.xx, top row). This tendency is less clear among 7- to 9-year-old children (middle row) and 4- to 6-year-old children (bottom row).

LS0tCnRpdGxlOiAiQXBwZW5kaXggQjogQWRkaXRpb25hbCBleHBsb3JhdGlvbnMgb2Ygb3JnYW5pemF0aW9uIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6IDQKICAgIHRvY19mbG9hdDogeWVzCmFsd2F5c19hbGxvd19odG1sOiB5ZXMKLS0tCgpgYGB7ciBnbG9iYWxfb3B0aW9ucywgaW5jbHVkZSA9IEZ9CmtuaXRyOjpvcHRzX2NodW5rJHNldChmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMC42NywKICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgPSBGLCBlY2hvID0gRikKYGBgCgpgYGB7cn0KIyAjIGZvciBrbml0dGluZyB0byAuZG9jeAojIG91dHB1dDoKIyAgIHdvcmRfZG9jdW1lbnQ6CiMgICAgIHJlZmVyZW5jZV9kb2N4OiAiLi93b3JkLXN0eWxlcy1yZWZlcmVuY2UuZG9jeCIKIyBhbHdheXNfYWxsb3dfaHRtbDogeWVzCgojICMgZm9yIGtuaXR0aW5nIHRvIC5uYi5odG1sIAojIG91dHB1dDoKIyAgIGh0bWxfbm90ZWJvb2s6CiMgICAgIHRvYzogeWVzCiMgICAgIHRvY19kZXB0aDogNAojICAgICB0b2NfZmxvYXQ6IHllcwpgYGAKCmBgYHtyfQojIHJ1biB1ci1zZXR1cCBzY3JpcHQgKHdoaWNoIHJ1bnMgb3RoZXIgc2NyaXB0cykKc291cmNlKCIuL3NjcmlwdHMvX1NFVFVQLlIiKQoKIyBsb2FkIGluIEVGQXMgJiBuYW1lcyBmcm9tIENoYXB0ZXJzIElJSSAmIElWCnNvdXJjZSgiLi9zY3JpcHRzL3N0b3JlZF9jaDAzLlIiKQpzb3VyY2UoIi4vc2NyaXB0cy9zdG9yZWRfY2gwNC5SIikKYGBgCgojIEFwcGVuZGl4IG92ZXJ2aWV3CgpJbiB0aGlzIGFwcGVuZGl4LCBJIHJlcG9ydCBhZGRpdGlvbmFsIGV4cGxvcmF0b3J5IGFuYWx5c2VzIG9mIHRoZSBvcmdhbml6YXRpb24gb2YgdGhlIHNldHMgb2YgImNvbmNlcHR1YWwgdW5pdHMiIHRoYXQgd2VyZSBleGNsdWRlZCBmcm9tIHRoZSBtYWluIHRleHQgb2YgQ2hhcHRlciBJViwgaW5jbHVkaW5nOiAoYSkgVmlzdWFsaXphdGlvbnMgYW5kIGFuYWx5c2VzIG9mIHRoZSByZWxhdGlvbnNoaXBzIGFtb25nIGNvbmNlcHR1YWwgdW5pdHMgdXNpbmcgc2NhbGVzIGRlcml2ZWQgZnJvbSBFRkEgb2YgY2hpbGRyZW4ncyBvd24gcmVzcG9uc2VzLCByYXRoZXIgdGhhbiBhZHVsdHMnIHJlc3BvbnNlcywgZm9yIDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4gaW4gU3R1ZHkgMywgNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbiBpbiBTdHVkeSAzLCBhbmQgNC0gdG8gNS15ZWFyLW9sZCBjaGlsZHJlbiBpbiBTdHVkeSA0OyAoYikgVmlzdWFsaXphdGlvbnMgYW5kIGFuYWx5c2VzIG9mIGFnZS1yZWxhdGVkIGNoYW5nZXMgaW4gZGlmZmVyZW5jZSBzY29yZXMgYmV0d2VlbiBjb25jZXB0dWFsIHVuaXRzIChzY29yZWQgdXNpbmcgYWR1bHRzJyBzY2FsZXMpIGZvciA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIGluIFN0dWR5IDIsIDQtIHRvIDkteWVhci1vbGQgY2hpbGRyZW4gaW4gU3R1ZHkgMywgYW5kIDQtIHRvIDUteWVhci1vbGQgY2hpbGRyZW4gaW4gU3R1ZHkgNDsgYW5kIChjKSBWaXN1YWxpemF0aW9ucyBvZiB0aGUgam9pbnQgZGVwZW5kZW5jeSBvZiBIRUFSVCBvbiBib3RoIEJPRFkgYW5kIE1JTkQuCgoKIyBSZWxhdGlvbnNoaXBzIGFtb25nIGNvbmNlcHR1YWwgdW5pdHMgdXNpbmcgc2NhbGVzIGRlcml2ZWQgZnJvbSBjaGlsZHJlbidzIEVGQXMKCkluIENoYXB0ZXIgSVYsIEkgdXNlZCBhZHVsdHMnIEVGQSBzb2x1dGlvbiB0byBjb25zdHJ1Y3QgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIHNjYWxlcyBhbmQgdXNlZCB0aGVzZSBzY2FsZXMgdG8gYXNzZXNzIHRoZSBvcmdhbml6YXRpb24gb2YgdGhlc2UgYWR1bHQtbGlrZSBjb25jZXB0dWFsIHVuaXRzIGFtb25nIGJvdGggYWR1bHQgYW5kIGNoaWxkIHNhbXBsZXMuIEZvciBTdHVkeSAyLCBJIGFsc28gdXNlZCA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuJ3Mgb3duIEVGQSBzb2x1dGlvbiB0byBjb25zdHJ1Y3QgYSBzZXBhcmF0ZSBzZXQgb2Ygc2NhbGVzIGJhc2VkIG9uIGNoaWxkcmVuJ3Mgb3duIGNvbmNlcHR1YWwgdW5pdHMgYW5kIGNvbmR1Y3RlZCBhIHNlcGFyYXRlIHNldCBvZiBhbmFseXNlcyBvZiB0aGUgb3JnYW5pemF0aW9uIG9mIHRoZXNlICJjaGlsZC1saWtlIiBjb25jZXB0dWFsIHVuaXRzLiBIZXJlIEkgcHJlc2VudCBhIHBhcmFsbGVsIHNldCBvZiBhbmFseXNlcyB1c2luZyBjaGlsZHJlbidzIG93biBFRkEgc29sdXRpb25zIChyYXRoZXIgdGhhbiBhZHVsdHMnKSB0byBhc3Nlc3MgdGhlIG9yZ2FuaXphdGlvbiBvZiBjb25jZXB0dWFsIHVuaXRzIGFtb25nIGJvdGggb2xkZXIgY2hpbGRyZW4gKDctOXkgb2YgYWdlKSBhbmQgeW91bmdlciBjaGlsZHJlbiAoNC02eSBvZiBhZ2UpIGluIFN0dWR5IDMsIGFzIHdlbGwgYXMgYW1vbmcgY2hpbGRyZW4gKDQtNXkgb2YgYWdlKSBpbiBTdHVkeSA0LgoKIyMgU3R1ZHkgMwoKIyMjIE9sZGVyIGNoaWxkcmVuICg3LTl5KSwgdXNpbmcgdGhlaXIgb3duIHNjYWxlcwoKIyMjIyBTY2FsZSBjb25zdHJ1Y3Rpb24KCmBgYHtyfQojIGRvbmUgaW4gY2gwNF9vcmdhbml6YXRpb24uUm1kCnNjYWxlc19lZmFfd2RtX2QzXzc5IDwtIHJlYWRSRFMoZmlsZSA9ICIuL3N0b3JlZC9zY2FsZXMvc2NhbGVzX2VmYV93ZG1fZDNfNzkiKQoKZDNfNzlfc2NvcmVkXzc5IDwtIHNjb3JlX2Z1bihkM183OSwgc2NhbGVzX2VmYV93ZG1fZDNfNzkpCnNhdmVSRFMoZDNfNzlfc2NvcmVkXzc5LCBmaWxlID0gIi4vc3RvcmVkL3Njb3JlZF9kYXRhL2QzXzc5X3Njb3JlZF83OSIpCmBgYAoKRm9sbG93aW5nIHRoZSBzdGVwcyBkZXNjcmliZWQgaW4gIkdlbmVyYWwgYW5hbHlzaXMgcGxhbiwiIGFib3ZlLCB5aWVsZGVkIGByIGZhY3RfbmFtZV9mdW4oZmFjdG9yX25hbWVzX2VmYV93ZG1fZDNfNzkpYCBzY2FsZXMgb2YgYHIgc2NhbGVzX2VmYV93ZG1fZDNfNzkgJT4lIGNvdW50KGZhY3RvcikgJT4lIHN1bW1hcmlzZShtZWFuID0gbWVhbihuKSkgJT4lIHNlbGVjdChtZWFuKSAlPiUgYXMubnVtZXJpYygpYCBpdGVtcyBlYWNoOyBzZWUgVGFibGUgQi4xLgoKIyMjIyBWaXN1YWxpemF0aW9uIGFuZCBhbmFseXNpcyBvZiBhc3ltbWV0cmllcwoKYGBge3J9CnBsb3RzX2QzXzc5X3Njb3JlZF83OSA8LSByZWx2aXpfZnVuKGQzXzc5X3Njb3JlZF83OSwgY29sb3JzID0gY29sb3JzMDkpCmBgYAoKYGBge3J9CmZpZ19kM183OV9zY29yZWRfNzlfcGxvdHMgPC0gcGxvdF9ncmlkKAogIHBsb3RzX2QzXzc5X3Njb3JlZF83OVtbMV1dICsgCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogIHBsb3RzX2QzXzc5X3Njb3JlZF83OVtbMl1dICsgCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogIHBsb3RzX2QzXzc5X3Njb3JlZF83OVtbM11dICsgCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogIGxhYmVscyA9IGMoIkExIiwgIkEyIiwgIkEzIiksIG5jb2wgPSAzKQoKZmlnX2QzXzc5X3Njb3JlZF83OV9sZWcgPC0gZ2V0X2xlZ2VuZCgKICBwbG90c19kM183OV9zY29yZWRfNzlbWzFdXSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwgbGVnZW5kLmRpcmVjdGlvbiA9ICJob3Jpem9udGFsIikgKwogICAgc2NhbGVfZmlsbF9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLCAKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGNvbG9yczA5LAogICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDkpKSArCiAgICBzY2FsZV9jb2xvcl9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLAogICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGNvbG9yczA5LAogICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHRpdGxlLnBvc2l0aW9uID0gImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gOSkpKQoKZmlnX2QzXzc5X3Njb3JlZF83OV9wbG90c19sZWcgPC0gcGxvdF9ncmlkKGZpZ19kM183OV9zY29yZWRfNzlfcGxvdHMsIGZpZ19kM183OV9zY29yZWRfNzlfbGVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygxLCAwLjA1KSkKCmZpZ19kM183OV9zY29yZWRfNzlfdGl0bGUgPC0gZ2dkcmF3KCkgKyAKICBkcmF3X2xhYmVsKCJTdHVkeSAzOiBDaGlsZHJlbiwgNy05eSAodXNpbmcgdGhlaXIgb3duIHNjYWxlcykiLCBzaXplID0gMTYsIGZvbnRmYWNlID0gJ2JvbGQnLCB4ID0gMCwgaGp1c3QgPSAwKQoKZmlnX2QzXzc5X3Njb3JlZF83OV9wbG90c19sZWdfdGl0bGUgPC0gcGxvdF9ncmlkKAogIGZpZ19kM183OV9zY29yZWRfNzlfdGl0bGUsIGZpZ19kM183OV9zY29yZWRfNzlfcGxvdHNfbGVnLAogIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMC4xMiwgMSkpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAwLjR9CiMgaW50ZXJpbSBwbG90IGZvciBlYXNlIG9mIHdyaXRpbmcKZmlnX2QzXzc5X3Njb3JlZF83OV9wbG90c19sZWdfdGl0bGUKYGBgCgpgYGB7cn0KZDNfNzlfc2NvcmVkXzc5X2RpZmYgPC0gZGlmZl9mdW4oZDNfNzlfc2NvcmVkXzc5KQpjb250cmFzdHMoZDNfNzlfc2NvcmVkXzc5X2RpZmYkY2hhcmFjdGVyKSA8LSBjb250cmFzdHNfc3VtX2R2MDkKCnNhdmVSRFMoZDNfNzlfc2NvcmVkXzc5X2RpZmYsICIuL3N0b3JlZC9kaWZmc2NvcmVfZGF0YS9kM183OV9zY29yZWRfNzlfZGlmZiIpCmBgYAoKYGBge3J9CnBsb3RfZDNfNzlfc2NvcmVkXzc5X2RpZmYgPC0gZGlmZnBsb3RfZnVuKGQzXzc5X3Njb3JlZF83OV9kaWZmLCBjb2xvcnMgPSBjb2xvcnMwOSkKYGBgCgpgYGB7cn0KIyByX2QzXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfSEVBUlQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiMgICBkYXRhID0gZDNfNzlfc2NvcmVkXzc5X2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKIyAgIGNvcmVzID0gNCkKIyAKIyBzYXZlUkRTKHJfZDNfNzlfc2NvcmVkXzc5X2RpZmZfQk9EWV9IRUFSVCwKIyAgICAgICAgICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfSEVBUlQiKQoKcl9kM183OV9zY29yZWRfNzlfZGlmZl9CT0RZX0hFQVJUIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDNfNzlfc2NvcmVkXzc5X2RpZmZfQk9EWV9IRUFSVCIpCgpzdW1tYXJ5KHJfZDNfNzlfc2NvcmVkXzc5X2RpZmZfQk9EWV9IRUFSVCkKYGBgCgpgYGB7cn0KIyByX2QzXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfTUlORCA8LSBicm0oCiMgICBkaWZmIH4gMSArIGNoYXJhY3RlciwKIyAgIGRhdGEgPSBkM183OV9zY29yZWRfNzlfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIiksCiMgICBjb3JlcyA9IDQpCiMgCiMgc2F2ZVJEUyhyX2QzXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfTUlORCwKIyAgICAgICAgICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfTUlORCIpCgpyX2QzXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfTUlORCA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfTUlORCIpCgpzdW1tYXJ5KHJfZDNfNzlfc2NvcmVkXzc5X2RpZmZfQk9EWV9NSU5EKQpgYGAKCmBgYHtyfQojIHJfZDNfNzlfc2NvcmVkXzc5X2RpZmZfSEVBUlRfTUlORCA8LSBicm0oCiMgICBkaWZmIH4gMSArIGNoYXJhY3RlciwKIyAgIGRhdGEgPSBkM183OV9zY29yZWRfNzlfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpLAojICAgY29yZXMgPSA0KQojIAojIHNhdmVSRFMocl9kM183OV9zY29yZWRfNzlfZGlmZl9IRUFSVF9NSU5ELAojICAgICAgICAgIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDNfNzlfc2NvcmVkXzc5X2RpZmZfSEVBUlRfTUlORCIpCgpyX2QzXzc5X3Njb3JlZF83OV9kaWZmX0hFQVJUX01JTkQgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kM183OV9zY29yZWRfNzlfZGlmZl9IRUFSVF9NSU5EIikKCnN1bW1hcnkocl9kM183OV9zY29yZWRfNzlfZGlmZl9IRUFSVF9NSU5EKQpgYGAKCmBgYHtyfQpyZWd0YWJfZDNfNzlfc2NvcmVkXzc5X2RpZmYgPC0gZGlmZl9yZWdfdGFibGVfZnVuKAogIHJlZ19saXN0ID0gbGlzdChyX2QzXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfSEVBUlQsCiAgICAgICAgICAgICAgICAgIHJfZDNfNzlfc2NvcmVkXzc5X2RpZmZfQk9EWV9NSU5ELAogICAgICAgICAgICAgICAgICByX2QzXzc5X3Njb3JlZF83OV9kaWZmX0hFQVJUX01JTkQpLAogIHBhaXJfbGlzdCA9IGMoIkJPRFkgLSBIRUFSVCIsICJCT0RZIC0gTUlORCIsICJIRUFSVCAtIE1JTkQiKSwKICBzdHVkeV9uYW1lID0gIkNoaWxkcmVuLCA3LTl5ICh1c2luZyB0aGVpciBvd24gc2NhbGVzKSIsCiAgY2hhcl9sYWJlbCA9IGMoIkVsZXBoYW50IHZzLiBHTSIsICJHb2F0IHZzLiBHTSIsICJNb3VzZSB2cy4gR00iLAogICAgICAgICAgICAgICAgICJCaXJkIHZzLiBHTSIsICJCZWV0bGUgdnMuIEdNIiwgIlRlZGR5IGJlYXIgdnMuIEdNIiwKICAgICAgICAgICAgICAgICAiRG9sbCB2cy4gR00iLCAiUm9ib3QgdnMuIEdNIikpCmBgYAoKYGBge3J9CiMgaW50ZXJpbSB0YWJsZSBmb3IgZWFzZSBvZiB3cml0aW5nCnJlZ3RhYl9kM183OV9zY29yZWRfNzlfZGlmZiAlPiUKICBzZWxlY3QoLXN0dWR5LCAtcy5lLikgJT4lCiAgZmlsdGVyKHBhcmFtID09ICJJbnRlcmNlcHQiKSAlPiUKICBrYWJsZShkaWdpdHMgPSAyKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDAuNH0KIyBpbnRlcmltIHBsb3QgZm9yIGVhc2Ugb2Ygd3JpdGluZwpwbG90X2QzXzc5X3Njb3JlZF83OV9kaWZmCmBgYAoKVmlzdWFsaXphdGlvbnMgb2YgcmVsYXRpb25zaGlwcyBhbW9uZyA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuJ3Mgc2NvcmVzIG9uIHRoZSBfQk9EWV8sIF9IRUFSVF8sIGFuZCBfTUlORF8gc2NhbGVzIGFyZSBwcm92aWRlZCBpbiBGaWd1cmUgQi54eCwgcm93IEEuIFRoZSByZXN1bHRzIG9mIEJheWVzaWFuIHJlZ3Jlc3Npb25zIGNvbXBhcmluZyBkaWZmZXJlbmNlIHNjb3JlcyBiZXR3ZWVuIGNvbmNlcHR1YWwgdW5pdHMgdG8gemVybywgY29udHJvbGxpbmcgZm9yIGRpZmZlcmVuY2VzIGluIGFzc2Vzc21lbnRzIG9mIHRoZSBuaW5lICJkaXZlcnNlIGNoYXJhY3RlcnMiIHRoYXQgd2VyZSBmZWF0dXJlZCBhcyB0YXJnZXQgY2hhcmFjdGVycyBpbiB0aGVzZSBzdHVkaWVzLCBhcmUgcHJvdmlkZWQgaW4gVGFibGUgQi54eC4KCk9uIHRoZSB3aG9sZSwgdGhlc2UgcmVzdWx0cyAodXNpbmcgX0JPRFlfLCBfSEVBUlRfLCBhbmQgX01JTkRfIHNjYWxlcyBkZXJpdmVkIGZyb20gRUZBIDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4ncyByZXNwb25zZXMpIGFyZSB2ZXJ5IHNpbWlsYXIgdG8gdGhvc2UgcHJlc2VudGVkIGluIHRoZSBtYWluIHRleHQgb2YgQ2hhcHRlciBJViAodXNpbmcgYWR1bHRzJyBfQk9EWV8sIF9IRUFSVF8sIGFuZCBfTUlORF8gc2NhbGVzKTogQ2hpbGRyZW4gc3lzdGVtYXRpY2FsbHkgZW5kb3JzZWQgX0JPRFlfIGFuZCBfTUlORF8gaXRlbXMgbW9yZSBzdHJvbmdseSB0aGFuIF9IRUFSVF8gaXRlbXMsIGJ1dCBzaG93ZWQgbm8gc3lzdGVtYXRpYyBhc3ltbWV0cnkgYmV0d2VlbiBCT0RZIGFuZCBNSU5ELiBUaGlzIGlzIHVuc3VycHJpc2luZywgc2luY2UgY2hpbGRyZW4ncyBhbmQgYWR1bHRzJyBzY2FsZXMgd2VyZSBzbyBzaW1pbGFyIHRvIGVhY2ggb3RoZXIgKHNlZSBUYWJsZSBCLnh4KS4KCiMjIyBZb3VuZ2VyIGNoaWxkcmVuICg0LTZ5KSwgdXNpbmcgdGhlaXIgb3duIHNjYWxlcyAodGhyZWUtZmFjdG9yIHNvbHV0aW9uKQoKIyMjIyBTY2FsZSBjb25zdHJ1Y3Rpb24KCmBgYHtyfQpzY2FsZXNfZWZhX3dkbV9kM180NiA8LSBzY2FsZV9mdW4oZWZhX3dkbV9kM180NiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfbmFtZXMgPSBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kM180NikKc2F2ZVJEUyhzY2FsZXNfZWZhX3dkbV9kM180NiwgZmlsZSA9ICIuL3N0b3JlZC9zY2FsZXMvc2NhbGVzX2VmYV93ZG1fZDNfNDYiKQoKZDNfNDZfc2NvcmVkXzQ2X3dkbSA8LSBzY29yZV9mdW4oZDNfNDYsIHNjYWxlc19lZmFfd2RtX2QzXzQ2KQpzYXZlUkRTKGQzXzQ2X3Njb3JlZF80Nl93ZG0sIGZpbGUgPSAiLi9zdG9yZWQvc2NvcmVkX2RhdGEvZDNfNDZfc2NvcmVkXzQ2X3dkbSIpCmBgYAoKRm9sbG93aW5nIHRoZSBzdGVwcyBkZXNjcmliZWQgaW4gIkdlbmVyYWwgYW5hbHlzaXMgcGxhbiwiIGFib3ZlLCB5aWVsZGVkIGByIGZhY3RfbmFtZV9mdW4oZmFjdG9yX25hbWVzX2VmYV93ZG1fZDNfNDYpYCBzY2FsZXMgb2YgYHIgc2NhbGVzX2VmYV93ZG1fZDNfNDYgJT4lIGNvdW50KGZhY3RvcikgJT4lIHN1bW1hcmlzZShtZWFuID0gbWVhbihuKSkgJT4lIHNlbGVjdChtZWFuKSAlPiUgYXMubnVtZXJpYygpYCBpdGVtcyBlYWNoOyBzZWUgVGFibGUgQi4xLgoKIyMjIyBWaXN1YWxpemF0aW9uIGFuZCBhbmFseXNpcyBvZiBhc3ltbWV0cmllcwoKYGBge3J9CnBsb3RzX2QzXzQ2X3Njb3JlZF80Nl93ZG0gPC0gcmVsdml6X2Z1bihkM180Nl9zY29yZWRfNDZfd2RtLCBjb2xvcnMgPSBjb2xvcnMwOSkKYGBgCgpgYGB7cn0KZmlnX2QzXzQ2X3Njb3JlZF80Nl93ZG1fcGxvdHMgPC0gcGxvdF9ncmlkKHBsb3RzX2QzXzQ2X3Njb3JlZF80Nl93ZG1bWzFdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDNfNDZfc2NvcmVkXzQ2X3dkbVtbMl1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90c19kM180Nl9zY29yZWRfNDZfd2RtW1szXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkIxIiwgIkIyIiwgIkIzIiksIG5jb2wgPSAzKQoKZmlnX2QzXzQ2X3Njb3JlZF80Nl93ZG1fbGVnIDwtIGdldF9sZWdlbmQoCiAgcGxvdHNfZDNfNDZfc2NvcmVkXzQ2X3dkbVtbMV1dICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLCBsZWdlbmQuZGlyZWN0aW9uID0gImhvcml6b250YWwiKSArCiAgICBzY2FsZV9maWxsX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsIAogICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gY29sb3JzMDksCiAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gOSkpICsKICAgIHNjYWxlX2NvbG9yX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsCiAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gY29sb3JzMDksCiAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImhvcml6b250YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSA5KSkpCgpmaWdfZDNfNDZfc2NvcmVkXzQ2X3dkbV9wbG90c19sZWcgPC0gcGxvdF9ncmlkKGZpZ19kM180Nl9zY29yZWRfNDZfd2RtX3Bsb3RzLCBmaWdfZDNfNDZfc2NvcmVkXzQ2X3dkbV9sZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygxLCAwLjA1KSkKCmZpZ19kM180Nl9zY29yZWRfNDZfd2RtX3RpdGxlIDwtIGdnZHJhdygpICsgCiAgZHJhd19sYWJlbCgiU3R1ZHkgMzogQ2hpbGRyZW4sIDQtNnkgKHVzaW5nIHRoZWlyIG93biBzY2FsZXMsIDMtZmFjdG9yIHNvbHV0aW9uKSIsIHNpemUgPSAxNiwgZm9udGZhY2UgPSAnYm9sZCcsIHggPSAwLCBoanVzdCA9IDApCgpmaWdfZDNfNDZfc2NvcmVkXzQ2X3dkbV9wbG90c19sZWdfdGl0bGUgPC0gcGxvdF9ncmlkKAogIGZpZ19kM180Nl9zY29yZWRfNDZfd2RtX3RpdGxlLCBmaWdfZDNfNDZfc2NvcmVkXzQ2X3dkbV9wbG90c19sZWcsCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygwLjEyLCAxKSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDAuNH0KIyBpbnRlcmltIHBsb3QgZm9yIGVhc2Ugb2Ygd3JpdGluZwpmaWdfZDNfNDZfc2NvcmVkXzQ2X3dkbV9wbG90c19sZWdfdGl0bGUKYGBgCgpgYGB7cn0KZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmIDwtIGRpZmZfZnVuKGQzXzQ2X3Njb3JlZF80Nl93ZG0pCmNvbnRyYXN0cyhkM180Nl9zY29yZWRfNDZfd2RtX2RpZmYkY2hhcmFjdGVyKSA8LSBjb250cmFzdHNfc3VtX2R2MDkKCnNhdmVSRFMoZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmLCAiLi9zdG9yZWQvZGlmZnNjb3JlX2RhdGEvZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmIikKYGBgCgpgYGB7cn0KcGxvdF9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmYgPC0gZGlmZnBsb3RfZnVuKGQzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiwgY29sb3JzID0gY29sb3JzMDkpCmBgYAoKYGBge3J9CiMgcl9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWV9IRUFSVCA8LSBicm0oCiMgICBkaWZmIH4gMSArIGNoYXJhY3RlciwKIyAgIGRhdGEgPSBkM180Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZKiAtIEhFQVJUKiIpLAojICAgY29yZXMgPSA0KQojIAojIHNhdmVSRFMocl9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWV9IRUFSVCwKIyAgICAgICAgICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZX0hFQVJUIikKCnJfZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlfSEVBUlQgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWV9IRUFSVCIpCgpzdW1tYXJ5KHJfZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlfSEVBUlQpCmBgYAoKYGBge3J9CiMgcl9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWV9NSU5EIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgY2hhcmFjdGVyLAojICAgZGF0YSA9IGQzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkqIC0gTUlORCIpLAojICAgY29yZXMgPSA0KQojIAojIHNhdmVSRFMocl9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWV9NSU5ELAojICAgICAgICAgIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlfTUlORCIpCgpyX2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZX01JTkQgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWV9NSU5EIikKCnN1bW1hcnkocl9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWV9NSU5EKQpgYGAKCmBgYHtyfQojIHJfZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0hFQVJUX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiMgICBkYXRhID0gZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQqIC0gTUlORCIpLAojICAgY29yZXMgPSA0KQojIAojIHNhdmVSRFMocl9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmZfSEVBUlRfTUlORCwKIyAgICAgICAgICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9IRUFSVF9NSU5EIikKCnJfZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0hFQVJUX01JTkQgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmZfSEVBUlRfTUlORCIpCgpzdW1tYXJ5KHJfZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0hFQVJUX01JTkQpCmBgYAoKYGBge3J9CnJlZ3RhYl9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmYgPC0gZGlmZl9yZWdfdGFibGVfZnVuKAogIHJlZ19saXN0ID0gbGlzdChyX2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZX0hFQVJULAogICAgICAgICAgICAgICAgICByX2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZX01JTkQsCiAgICAgICAgICAgICAgICAgIHJfZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0hFQVJUX01JTkQpLAogIHBhaXJfbGlzdCA9IGMoIkJPRFkqIC0gSEVBUlQqIiwgIkJPRFkqIC0gTUlORCIsICJIRUFSVCogLSBNSU5EIiksCiAgc3R1ZHlfbmFtZSA9ICJDaGlsZHJlbiwgNC02eSAodXNpbmcgdGhlaXIgb3duIHNjYWxlcywgMy1mYWN0b3Igc29sdXRpb24pIiwKICBjaGFyX2xhYmVsID0gYygiRWxlcGhhbnQgdnMuIEdNIiwgIkdvYXQgdnMuIEdNIiwgIk1vdXNlIHZzLiBHTSIsCiAgICAgICAgICAgICAgICAgIkJpcmQgdnMuIEdNIiwgIkJlZXRsZSB2cy4gR00iLCAiVGVkZHkgYmVhciB2cy4gR00iLAogICAgICAgICAgICAgICAgICJEb2xsIHZzLiBHTSIsICJSb2JvdCB2cy4gR00iKSkKYGBgCgpgYGB7cn0KIyBpbnRlcmltIHRhYmxlIGZvciBlYXNlIG9mIHdyaXRpbmcKcmVndGFiX2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUKICBzZWxlY3QoLXN0dWR5LCAtcy5lLikgJT4lCiAgZmlsdGVyKHBhcmFtID09ICJJbnRlcmNlcHQiKSAlPiUKICBrYWJsZShkaWdpdHMgPSAyKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDAuNH0KIyBpbnRlcmltIHBsb3QgZm9yIGVhc2Ugb2Ygd3JpdGluZwpwbG90X2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZgpgYGAKClZpc3VhbGl6YXRpb25zIG9mIHJlbGF0aW9uc2hpcHMgYW1vbmcgNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbidzIHNjb3JlcyBvbiB0aGUgX0JPRFlcKl8sIF9IRUFSVFwqXywgYW5kIF9NSU5EXyBzY2FsZXMgYXJlIHByb3ZpZGVkIGluIEZpZ3VyZSBCLnh4LCByb3cgQi4gVGhlIHJlc3VsdHMgb2YgQmF5ZXNpYW4gcmVncmVzc2lvbnMgY29tcGFyaW5nIGRpZmZlcmVuY2Ugc2NvcmVzIGJldHdlZW4gY29uY2VwdHVhbCB1bml0cyB0byB6ZXJvLCBjb250cm9sbGluZyBmb3IgZGlmZmVyZW5jZXMgaW4gYXNzZXNzbWVudHMgb2YgdGhlIG5pbmUgImRpdmVyc2UgY2hhcmFjdGVycyIgdGhhdCB3ZXJlIGZlYXR1cmVkIGFzIHRhcmdldCBjaGFyYWN0ZXJzIGluIHRoZXNlIHN0dWRpZXMsIGFyZSBwcm92aWRlZCBpbiBUYWJsZSBCLnh4LgoKQXMgaW4gdGhlIHJlc3VsdHMgcHJlc2VudGVkIGluIHRoZSBtYWluIHRleHQgb2YgQ2hhcHRlciBJViAodXNpbmcgYWR1bHRzJyBfQk9EWV8sIF9IRUFSVF8sIGFuZCBfTUlORF8gc2NhbGVzKSwgNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbiBzeXN0ZW1hdGljYWxseSBlbmRvcnNlZCBfQk9EWVwqXyBpdGVtcyBtb3JlIHN0cm9uZ2x5IHRoYW4gX01JTkRfIGl0ZW1zLiBUaGlzIGlzIGZ1cnRoZXIgZXZpZGVuY2Ugb2YgYSBtYXJrZWRseSB1bi1hZHVsdC1saWtlIGludHVpdGlvbiB0aGF0IEJPRFkgbWF5IGJlIGEgbW9yZSBiYXNpYyBjb25jZXB0dWFsIHVuaXQgdGhhbiBNSU5ELgoKSW4gY29udHJhc3QgdG8gdGhlIHJlc3VsdHMgcHJlc2VudGVkIGluIHRoZSBtYWluIHRleHQgb2YgQ2hhcHRlciBJViwgNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbidzIF9CT0RZXCpfIHZzLiBfSEVBUlRcKl8gZGlmZmVyZW5jZSBzY29yZXMgd2VyZSBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIHplcm8sIGFuZCB0aGV5IHN5c3RlbWF0aWNhbGx5IGVuZG9yc2VkIF9IRUFSVFwqXyBpdGVtcyBtb3JlIHN0cm9uZ2x5IHRoYW4gX01JTkRfIGl0ZW1zLiBCb3RoIG9mIHRoZXNlIG9ic2VydmF0aW9ucyByZW5kZXIgNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbidzIGNvbmNlcHR1YWwgb3JnYW5pemF0aW9ucyBldmVuIGxlc3MgYWR1bHQtbGlrZSB0aGFuIHRob3NlIHJlcG9ydGVkIGluIENoYXB0ZXIgSVYuCgojIyMgWW91bmdlciBjaGlsZHJlbiAoNC02eSksIHVzaW5nIHRoZWlyIG93biBzY2FsZXMgKHR3by1mYWN0b3Igc29sdXRpb24pCgojIyMjIFNjYWxlIGNvbnN0cnVjdGlvbgoKYGBge3J9CnNjYWxlc19lZmFfcGFyX2QzXzQ2IDwtIHNjYWxlX2Z1bihlZmFfcGFyX2QzXzQ2LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcl9uYW1lcyA9IGZhY3Rvcl9uYW1lc19lZmFfcGFyX2QzXzQ2KQpzYXZlUkRTKHNjYWxlc19lZmFfcGFyX2QzXzQ2LCBmaWxlID0gIi4vc3RvcmVkL3NjYWxlcy9zY2FsZXNfZWZhX3Bhcl9kM180NiIpCgpkM180Nl9zY29yZWRfNDZfcGFyIDwtIHNjb3JlX2Z1bihkM180Niwgc2NhbGVzX2VmYV9wYXJfZDNfNDYpCnNhdmVSRFMoZDNfNDZfc2NvcmVkXzQ2X3BhciwgZmlsZSA9ICIuL3N0b3JlZC9zY29yZWRfZGF0YS9kM180Nl9zY29yZWRfNDZfcGFyIikKYGBgCgpGb2xsb3dpbmcgdGhlIHN0ZXBzIGRlc2NyaWJlZCBpbiAiR2VuZXJhbCBhbmFseXNpcyBwbGFuLCIgYWJvdmUsIHlpZWxkZWQgYHIgZmFjdF9uYW1lX2Z1bihmYWN0b3JfbmFtZXNfZWZhX3Bhcl9kM180NilgIHNjYWxlcyBvZiBgciBzY2FsZXNfZWZhX3Bhcl9kM180NiAlPiUgY291bnQoZmFjdG9yKSAlPiUgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKG4pKSAlPiUgc2VsZWN0KG1lYW4pICU+JSBhcy5udW1lcmljKClgIGl0ZW1zIGVhY2g7IHNlZSBUYWJsZSBCLjEuCgojIyMjIFZpc3VhbGl6YXRpb24gYW5kIGFuYWx5c2lzIG9mIGFzeW1tZXRyaWVzCgpgYGB7cn0KcGxvdHNfZDNfNDZfc2NvcmVkXzQ2X3BhciA8LSByZWx2aXpfZnVuKGQzXzQ2X3Njb3JlZF80Nl9wYXIsIGNvbG9ycyA9IGNvbG9yczA5KQpgYGAKCmBgYHtyfQpmaWdfZDNfNDZfc2NvcmVkXzQ2X3Bhcl9wbG90cyA8LSBwbG90X2dyaWQocGxvdHNfZDNfNDZfc2NvcmVkXzQ2X3BhcltbMV1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJDMSIpLCBuY29sID0gMykKCmZpZ19kM180Nl9zY29yZWRfNDZfcGFyX2xlZyA8LSBnZXRfbGVnZW5kKAogIHBsb3RzX2QzXzQ2X3Njb3JlZF80Nl9wYXJbWzFdXSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwgbGVnZW5kLmRpcmVjdGlvbiA9ICJob3Jpem9udGFsIikgKwogICAgc2NhbGVfZmlsbF9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLCAKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGNvbG9yczA5LAogICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDkpKSArCiAgICBzY2FsZV9jb2xvcl9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLAogICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGNvbG9yczA5LAogICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHRpdGxlLnBvc2l0aW9uID0gImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gOSkpKQoKZmlnX2QzXzQ2X3Njb3JlZF80Nl9wYXJfcGxvdHNfbGVnIDwtIHBsb3RfZ3JpZChmaWdfZDNfNDZfc2NvcmVkXzQ2X3Bhcl9wbG90cywgZmlnX2QzXzQ2X3Njb3JlZF80Nl9wYXJfbGVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMSwgMC4wNSkpCgpmaWdfZDNfNDZfc2NvcmVkXzQ2X3Bhcl90aXRsZSA8LSBnZ2RyYXcoKSArIAogIGRyYXdfbGFiZWwoIlN0dWR5IDM6IENoaWxkcmVuLCA0LTZ5ICh1c2luZyB0aGVpciBvd24gc2NhbGVzLCAyLWZhY3RvciBzb2x1dGlvbikiLCBzaXplID0gMTYsIGZvbnRmYWNlID0gJ2JvbGQnLCB4ID0gMCwgaGp1c3QgPSAwKQoKZmlnX2QzXzQ2X3Njb3JlZF80Nl9wYXJfcGxvdHNfbGVnX3RpdGxlIDwtIHBsb3RfZ3JpZCgKICBmaWdfZDNfNDZfc2NvcmVkXzQ2X3Bhcl90aXRsZSwgZmlnX2QzXzQ2X3Njb3JlZF80Nl9wYXJfcGxvdHNfbGVnLAogIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMC4xMiwgMSkpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAwLjR9CiMgaW50ZXJpbSBwbG90IGZvciBlYXNlIG9mIHdyaXRpbmcKZmlnX2QzXzQ2X3Njb3JlZF80Nl9wYXJfcGxvdHNfbGVnX3RpdGxlCmBgYAoKYGBge3J9CmQzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiA8LSBkaWZmX2Z1bihkM180Nl9zY29yZWRfNDZfcGFyKQpjb250cmFzdHMoZDNfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmJGNoYXJhY3RlcikgPC0gY29udHJhc3RzX3N1bV9kdjA5CgpzYXZlUkRTKGQzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiwgIi4vc3RvcmVkL2RpZmZzY29yZV9kYXRhL2QzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiIpCmBgYAoKYGBge3J9CnBsb3RfZDNfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmIDwtIGRpZmZwbG90X2Z1bihkM180Nl9zY29yZWRfNDZfcGFyX2RpZmYsIGNvbG9ycyA9IGNvbG9yczA5KQpgYGAKCmBgYHtyfQojIHJfZDNfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0JPRFlIRUFSVF9NSU5EIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgY2hhcmFjdGVyLAojICAgZGF0YSA9IGQzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFktSEVBUlQgLSBNSU5EIiksCiMgICBjb3JlcyA9IDQpCiMgCiMgc2F2ZVJEUyhyX2QzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9CT0RZSEVBUlRfTUlORCwKIyAgICAgICAgICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9CT0RZSEVBUlRfTUlORCIpCgpyX2QzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9CT0RZSEVBUlRfTUlORCA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9CT0RZSEVBUlRfTUlORCIpCgpzdW1tYXJ5KHJfZDNfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0JPRFlIRUFSVF9NSU5EKQpgYGAKCmBgYHtyfQpyZWd0YWJfZDNfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmIDwtIGRpZmZfcmVnX3RhYmxlX2Z1bigKICByZWdfbGlzdCA9IGxpc3Qocl9kM180Nl9zY29yZWRfNDZfcGFyX2RpZmZfQk9EWUhFQVJUX01JTkQpLAogIHBhaXJfbGlzdCA9ICJCT0RZLUhFQVJUIC0gTUlORCIsCiAgc3R1ZHlfbmFtZSA9ICJDaGlsZHJlbiwgNC02eSAodXNpbmcgdGhlaXIgb3duIHNjYWxlcywgMi1mYWN0b3Igc29sdXRpb24pIiwKICBjaGFyX2xhYmVsID0gYygiRWxlcGhhbnQgdnMuIEdNIiwgIkdvYXQgdnMuIEdNIiwgIk1vdXNlIHZzLiBHTSIsCiAgICAgICAgICAgICAgICAgIkJpcmQgdnMuIEdNIiwgIkJlZXRsZSB2cy4gR00iLCAiVGVkZHkgYmVhciB2cy4gR00iLAogICAgICAgICAgICAgICAgICJEb2xsIHZzLiBHTSIsICJSb2JvdCB2cy4gR00iKSkKYGBgCgpgYGB7cn0KIyBpbnRlcmltIHRhYmxlIGZvciBlYXNlIG9mIHdyaXRpbmcKcmVndGFiX2QzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiAlPiUKICBzZWxlY3QoLXN0dWR5LCAtcy5lLikgJT4lCiAgZmlsdGVyKHBhcmFtID09ICJJbnRlcmNlcHQiKSAlPiUKICBrYWJsZShkaWdpdHMgPSAyKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDAuNH0KIyBpbnRlcmltIHBsb3QgZm9yIGVhc2Ugb2Ygd3JpdGluZwpwbG90X2QzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZgpgYGAKClZpc3VhbGl6YXRpb25zIG9mIHJlbGF0aW9uc2hpcHMgYW1vbmcgNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbidzIHNjb3JlcyBvbiB0aGUgX0JPRFktSEVBUlRfIGFuZCBfTUlORF8gc2NhbGVzIGFyZSBwcm92aWRlZCBpbiBGaWd1cmUgQi54eCwgcm93IEIuIFRoZSByZXN1bHRzIG9mIGEgQmF5ZXNpYW4gcmVncmVzc2lvbiBjb21wYXJpbmcgZGlmZmVyZW5jZSBzY29yZXMgYmV0d2VlbiBjb25jZXB0dWFsIHVuaXRzIHRvIHplcm8sIGNvbnRyb2xsaW5nIGZvciBkaWZmZXJlbmNlcyBpbiBhc3Nlc3NtZW50cyBvZiB0aGUgbmluZSAiZGl2ZXJzZSBjaGFyYWN0ZXJzIiB0aGF0IHdlcmUgZmVhdHVyZWQgYXMgdGFyZ2V0IGNoYXJhY3RlcnMgaW4gdGhlc2Ugc3R1ZGllcywgYXJlIHByb3ZpZGVkIGluIFRhYmxlIEIueHguCgpUaGUgbWFpbiB0YWtlLWF3YXkgb2YgdGhpcyBhbmFseXNpcyBpcyB0aGF0IDQtIHRvIDYteWVhci1vbGQgY2hpbGRyZW4gcmVsaWFibHkgZW5kb3JzZWQgX0JPRFktSEVBUlRfIGl0ZW1zIG1vcmUgc3Ryb25nbHkgdGhhbiBfTUlORF8gaXRlbXMuCgojIyMgRGlzY3Vzc2lvbgoKYGBge3J9CmFsdHNjYWxlc19zdHVkeTMgPC0gYmluZF9yb3dzKAogIHNjYWxlc19lZmFfd2RtX2QzX2FkICU+JSAKICAgIG11dGF0ZShzdHVkeSA9ICJBZHVsdHMiKSwKICBzY2FsZXNfZWZhX3dkbV9kM183OSAlPiUgCiAgICBtdXRhdGUoc3R1ZHkgPSAiT2xkZXIgY2hpbGRyZW4sIDctOXkiKSwKICBzY2FsZXNfZWZhX3dkbV9kM180NiAlPiUKICAgIG11dGF0ZShzdHVkeSA9ICJZb3VuZ2VyIGNoaWxkcmVuLCA0LTZ5ICgzLWZhY3RvciBzb2x1dGlvbikiKSwKICBzY2FsZXNfZWZhX3Bhcl9kM180NiAlPiUKICAgIG11dGF0ZShzdHVkeSA9ICJZb3VuZ2VyIGNoaWxkcmVuLCA0LTZ5ICgyLWZhY3RvciBzb2x1dGlvbikiKSkgJT4lCiAgc2VsZWN0KC1jKGxvYWRpbmcsIG9yZGVyKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBtdXRhdGUoc3R1ZHkgPSBmYWN0b3Ioc3R1ZHksCiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIkFkdWx0cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9sZGVyIGNoaWxkcmVuLCA3LTl5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMy1mYWN0b3Igc29sdXRpb24pIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMi1mYWN0b3Igc29sdXRpb24pIikpKSAlPiUKICBzcHJlYWQoc3R1ZHksIGZhY3RvcikgJT4lCiAgbXV0YXRlKHVyX2ZhY3RvciA9IGlmZWxzZSghaXMubmEoYEFkdWx0c2ApLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBBZHVsdHNgLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZSghaXMubmEoYE9sZGVyIGNoaWxkcmVuLCA3LTl5YCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBPbGRlciBjaGlsZHJlbiwgNy05eWAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGlzLm5hKGBZb3VuZ2VyIGNoaWxkcmVuLCA0LTZ5ICgzLWZhY3RvciBzb2x1dGlvbilgKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBZb3VuZ2VyIGNoaWxkcmVuLCA0LTZ5ICgzLWZhY3RvciBzb2x1dGlvbilgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMi1mYWN0b3Igc29sdXRpb24pYCkpKSkgJT4lCiAgbGVmdF9qb2luKHNjYWxlc19lZmFfd2RtX2QzX2FkICU+JSAKICAgICAgICAgICAgICBzZWxlY3QoY2FwYWNpdHksIG9yZGVyKSAlPiUgcmVuYW1lKG9yZGVyX2FkID0gb3JkZXIpKSAlPiUKICBsZWZ0X2pvaW4oc2NhbGVzX2VmYV93ZG1fZDNfNzkgJT4lIAogICAgICAgICAgICAgIHNlbGVjdChjYXBhY2l0eSwgb3JkZXIpICU+JSByZW5hbWUob3JkZXJfNzkgPSBvcmRlcikpICU+JQogIGFycmFuZ2UodXJfZmFjdG9yLCBvcmRlcl9hZCwgb3JkZXJfNzkpICU+JQogIHNlbGVjdCgtYyh1cl9mYWN0b3IsIHN0YXJ0c193aXRoKCJvcmRlciIpKSkKYGBgCgpgYGB7cn0KdGFibGVCLjEgPC0gYWx0c2NhbGVzX3N0dWR5MyAlPiUKICBtdXRhdGVfYWxsKGFzLmNoYXJhY3RlcikgJT4lCiAgIyBkZWFsIHdpdGggeW91bmdlciBjaGlsZHJlbiwgMi1mYWN0b3Igc29sdXRpb24KICBtdXRhdGUodGVtcDEgPSBgWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMi1mYWN0b3Igc29sdXRpb24pYCwKICAgICAgICAgdGVtcDIgPSBnc3ViKCJcXCoiLCAiIiwgdGVtcDEpLAogICAgICAgICB0ZW1wMyA9IGNhc2Vfd2hlbigKICAgICAgICAgICB0ZW1wMiA9PSBgQWR1bHRzYCB8IAogICAgICAgICAgICAgdGVtcDIgPT0gYE9sZGVyIGNoaWxkcmVuLCA3LTl5YCB+ICLinJMiLAogICAgICAgICAgIGlzLm5hKHRlbXAyKSB+ICIiLAogICAgICAgICAgIFRSVUUgfiB0ZW1wMSkpICU+JQogIG11dGF0ZShgWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMi1mYWN0b3Igc29sdXRpb24pYCA9IHRlbXAzKSAlPiUKICBzZWxlY3QoLXN0YXJ0c193aXRoKCJ0ZW1wIikpICU+JQogICMgZGVhbCB3aXRoIHlvdW5nZXIgY2hpbGRyZW4sIDMtZmFjdG9yIHNvbHV0aW9uCiAgbXV0YXRlKHRlbXAxID0gYFlvdW5nZXIgY2hpbGRyZW4sIDQtNnkgKDMtZmFjdG9yIHNvbHV0aW9uKWAsCiAgICAgICAgIHRlbXAyID0gZ3N1YigiXFwqIiwgIiIsIHRlbXAxKSwKICAgICAgICAgdGVtcDMgPSBjYXNlX3doZW4oCiAgICAgICAgICAgdGVtcDIgPT0gYEFkdWx0c2AgfCAKICAgICAgICAgICAgIHRlbXAyID09IGBPbGRlciBjaGlsZHJlbiwgNy05eWAgfAogICAgICAgICAgICAgKGlzLm5hKGBBZHVsdHNgKSAmIGlzLm5hKGBPbGRlciBjaGlsZHJlbiwgNy05eWApKSB+ICLinJMiLAogICAgICAgICAgIGlzLm5hKHRlbXAyKSB+ICIiLAogICAgICAgICAgIFRSVUUgfiB0ZW1wMSkpICU+JQogIG11dGF0ZShgWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMy1mYWN0b3Igc29sdXRpb24pYCA9IHRlbXAzKSAlPiUKICBzZWxlY3QoLXN0YXJ0c193aXRoKCJ0ZW1wIikpICU+JQogIG11dGF0ZV9hdCh2YXJzKGBBZHVsdHNgLCBgT2xkZXIgY2hpbGRyZW4sIDctOXlgKSwKICAgICAgICAgICAgZnVucyhpZmVsc2UoaXMubmEoLiksICIiLCAi4pyTIikpKSAlPiUKICBtdXRhdGVfYXQodmFycyhzdGFydHNfd2l0aCgiWW91bmdlciIpKSwKICAgICAgICAgICAgZnVucyhpZmVsc2UoaXMubmEoLiksICIiLCAuKSkpICU+JQogIHJlbmFtZShDYXBhY2l0eSA9IGNhcGFjaXR5LAogICAgICAgICBgMy1mYWN0b3Igc29sdXRpb25gID0gYFlvdW5nZXIgY2hpbGRyZW4sIDQtNnkgKDMtZmFjdG9yIHNvbHV0aW9uKWAsCiAgICAgICAgIGAyLWZhY3RvciBzb2x1dGlvbmAgPSBgWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMi1mYWN0b3Igc29sdXRpb24pYCkgJT4lCiAga2FibGUoZm9ybWF0ID0gImh0bWwiLAogICAgICAgIGNhcHRpb24gPSAiVGFibGUgQi4xOiBTY2FsZXMgZm9yIGVhY2ggb2YgdGhlIGNvbmNlcHR1YWwgdW5pdHMgKGZhY3RvcnMpIGlkZW50aWZpZWQgYnkgRUZBIGZvciBVUyBBZHVsdHMsIG9sZGVyIGNoaWxkcmVuLCBhbmQgeW91bmdlciBjaGlsZHJlbiBpbiBTdHVkeSAzIChzZWUgQ2hhcHRlciBJSUkpLiBGb3IgeW91bmdlciBjaGlsZHJlbiwgdGhpcyBpbmNsdWRlcyBzY2FsZXMgZm9yIGJvdGggdGhyZWUtIGFuZCB0d28tZmFjdG9yIEVGQSBzb2x1dGlvbnMuIEEgY2hlY2ttYXJrIGluZGljYXRlcyB0aGF0IGEgbWVudGFsIGNhcGFjaXR5IHdhcyBpbmNsdWRlZCBpbiBhIHNjYWxlIGZvciBhIHBhcnRpY3VsYXIgc2FtcGxlLiBUaGUgY29uY2VwdHVhbCB1bml0cyBvZiB5b3VuZ2VyIGNoaWxkcmVuIGRpZmZlcmVkIHN1YnN0YW50aWFsbHkgZnJvbSB0aG9zZSBvZiBvbGRlciBjaGlsZHJlbiBhbmQgYWR1bHRzLCBzdWNoIHRoYXQgc29tZSBtZW50YWwgY2FwYWNpdGllcyB3ZXJlIGluY2x1ZGVkIGluIGRpZmZlcmVudCBzY2FsZXMgYWNyb3NzIGFnZSBncm91cHMgKGUuZy4sIGZlZWwgc2NhcmVkIHdhcyBwYXJ0IG9mIHRoZSBCT0RZIHNjYWxlIGZvciBvbGRlciBjaGlsZHJlbiBhbmQgYWR1bHRzLCBidXQgcGFydCBvZiB0aGUgSEVBUlQqIHNjYWxlIGZvciB5b3VuZ2VyIGNoaWxkcmVuKS4gSW4gdGhlc2UgY2FzZXMsIHRoZSBuYW1lIG9mIHRoZSBzY2FsZSBpcyBwcm92aWRlZCAocmF0aGVyIHRoYW4gYSBjaGVja21hcmspLiIpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJCT0RZIHNjYWxlIiwgMSwgNykgJT4lCiAgZ3JvdXBfcm93cygiSEVBUlQgc2NhbGUiLCA4LCAxNCkgJT4lCiAgZ3JvdXBfcm93cygiTUlORCBzY2FsZSIsIDE1LCAyMCkgJT4lCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIiA9IDMsCiAgICAgICAgICAgICAgICAgICAgICJZb3VuZ2VyIGNoaWxkcmVuLCA0LTZ5IiA9IDIpKQpgYGAKCmBgYHtyIHRhYmxlQi4xLCBpbmNsdWRlID0gVH0KdGFibGVCLjEKYGBgCgpgYGB7cn0KZmlndXJlQi4xIDwtIHBsb3RfZ3JpZChmaWdfZDNfNzlfc2NvcmVkXzc5X3Bsb3RzX2xlZ190aXRsZSwgCiAgICAgICAgICAgICAgICAgICAgICAgZmlnX2QzXzQ2X3Njb3JlZF80Nl93ZG1fcGxvdHNfbGVnX3RpdGxlLAogICAgICAgICAgICAgICAgICAgICAgIGZpZ19kM180Nl9zY29yZWRfNDZfcGFyX3Bsb3RzX2xlZ190aXRsZSwKICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMSkKCmZpZ3VyZUIuMV9jYXAgPC0gYWRkX3N1YihmaWd1cmVCLjEsIHN0cl93cmFwKCJGaWd1cmUgQi4xOiBSZWxhdGlvbnNoaXBzIGFtb25nIG9sZGVyIGFuZCB5b3VuZ2VyIGNoaWxkcmVuJ3MgYXR0cmlidXRpb25zIG9mIGNvbmNlcHR1YWwgdW5pdHMgaW4gU3R1ZHkgMywgc2NvcmVkIHVzaW5nIHRoZWlyIG93biBzY2FsZXMgKHNlZSBUYWJsZSBCLjEpLiBGb3IgeW91bmdlciBjaGlsZHJlbiAoNC02eSBvZiBhZ2UpLCB0d28gc2V0cyBvZiBzY29yZXMgYXJlIHByZXNlbnRlZDogdXNpbmcgYSB0aHJlZS1mYWN0b3IgRUZBIHNvbHV0aW9uIChCMS1CMykgYW5kIHVzaW5nIGEgdHdvLWZhY3RvciBFRkEgc29sdXRpb24gKEMxKS4gUGxvdHMgYXJlIG9yZ2FuaXplZCBieSBzYW1wbGUgYW5kIHNjYWxlIHVzZWQgKHJvd3MpIGFuZCBieSBwYWlyIG9mIGNvbmNlcHR1YWwgdW5pdHMgKGNvbHVtbnMpLiBGb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQsIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAtMS4gSW5kaXZpZHVhbCBwYXJ0aWNpcGFudHMgYXJlIHBsb3R0ZWQgYXMgc21hbGwsIHRyYW5zbHVjZW50IGNpcmNsZXMsIGFuZCBtZWFuIHNjb3JlcyBieSBjaGFyYWN0ZXIgYXJlIHBsb3R0ZWQgYXMgbGFyZ2VyLCBzb2xpZCBkaWFtb25kcy4gRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscy4gVGhlIGRvdHRlZCBsaW5lIGNvcnJlc3BvbmRzIHRvIGVxdWFsIGVuZG9yc2VtZW50cyBvZiB0aGUgdHdvIGNvbmNlcHR1YWwgdW5pdHMgcGxvdHRlZC4iLCAxMTApLCB4ID0gMCwgaGp1c3QgPSAwKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVCwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDEuNH0KZ2dkcmF3KGZpZ3VyZUIuMV9jYXApCmBgYAoKYGBge3J9CmZpZ3VyZUIuMl9wbG90cyA8LSBwbG90X2dyaWQoCiAgcGxvdF9kM183OV9zY29yZWRfNzlfZGlmZiArCiAgICBsYWJzKHRpdGxlID0gIlN0dWR5IDM6IENoaWxkcmVuLCA3LTl5XG4oc2NvcmVkIHVzaW5nIHRoZWlyIG93biBzY2FsZXMpIikgKwogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICBwbG90X2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiArIAogICAgbGFicyh0aXRsZSA9ICJTdHVkeSAzOiBDaGlsZHJlbiwgNC02eVxuKHNjb3JlZCB1c2luZyB0aGVpciBvd24gc2NhbGVzLCAzLWZhY3RvciBzb2x1dGlvbikiKSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLCAKICBwbG90X2QzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiArIAogICAgbGFicyh0aXRsZSA9ICJTdHVkeSAzOiBDaGlsZHJlbiwgNC02eVxuKHNjb3JlZCB1c2luZyB0aGVpciBvd24gc2NhbGVzLCAyLWZhY3RvciBzb2x1dGlvbikiKSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLCAKICBuY29sID0gMywgcmVsX3dpZHRocyA9IGMoMSwgMSwgMC44KSwKICBsYWJlbHMgPSAiQVVUTyIpCgpmaWd1cmVCLjJfcGxvdHNfbGVnIDwtIHBsb3RfZ3JpZChmaWd1cmVCLjJfcGxvdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9sZWdlbmQocGxvdF9kM183OV9zY29yZWRfNzlfZGlmZiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMSwgMC4xKSkKCmZpZ3VyZUIuMl9jYXAgPC0gYWRkX3N1YihmaWd1cmVCLjJfcGxvdHNfbGVnLCBzdHJfd3JhcCgiRmlndXJlIEIuMjogRGlmZmVyZW5jZSBzY29yZXMgYmV0d2VlbiA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuJ3MgYW5kIDQtIHRvIDYteWVhci1vbGQgY2hpbGRyZW4ncyBhdHRyaWJ1dGlvbnMgb2YgY29uY2VwdHVhbCB1bml0cyBpbiBTdHVkeSAzLCB1c2luZyB0aGVpciBvd24gc2NhbGVzLiBGb3IgeW91bmdlciBjaGlsZHJlbiAoNC02eSBvZiBhZ2UpLCB0aGlzIGluY2x1ZGVzIGRpZmZlcmVuY2Ugc2NvcmVzIHVzaW5nIHRoZSB0aHJlZS1mYWN0b3IgRUZBIHNvbHV0aW9uIChwYW5lbCBCKSBhbmQgZGlmZmVyZW5jZSBzY29yZXMgdXNpbmcgdGhlIHR3by1mYWN0b3Igc29sdXRpb24gKHBhbmVsIEM7IHNlZSBUYWJsZSBCLjEpLiBGb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQsIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAtMSwgc3VjaCB0aGF0IGRpZmZlcmVuY2Ugc2NvcmVzIGNvdWxkIHJhbmdlIGZyb20gLTEgdG8gKzEuIEluZGl2aWR1YWwgcGFydGljaXBhbnRzIGFyZSBwbG90dGVkIGFzIHNtYWxsLCB0cmFuc2x1Y2VudCBjaXJjbGVzLCBhbmQgbWVhbiBkaWZmZXJlbmNlIHNjb3JlcyBieSBjaGFyYWN0ZXIgYXJlIHBsb3R0ZWQgYXMgbGFyZ2VyLCBzb2xpZCBkaWFtb25kcy4gRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscy4gVGhlIGRvdHRlZCBsaW5lIGNvcnJlc3BvbmRzIHRvIGVxdWFsIGVuZG9yc2VtZW50cyBvZiB0aGUgdHdvIGNvbmNlcHR1YWwgdW5pdHMgcGxvdHRlZCAoaS5lLiwgYSBkaWZmZXJlbmNlIHNjb3JlIG9mIDApLiIsIDE4MCksIHggPSAwLCBoanVzdCA9IDApCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA4LCBmaWcuYXNwID0gMC4zOH0KZ2dkcmF3KGZpZ3VyZUIuMl9jYXApCmBgYAoKIyMgU3R1ZHkgNAoKIyMjIFlvdW5nZXIgY2hpbGRyZW4gKDQtNnkpLCB1c2luZyB0aGVpciBvd24gc2NhbGVzICh0aHJlZS1mYWN0b3Igc29sdXRpb24pCgojIyMjIFNjYWxlIGNvbnN0cnVjdGlvbgoKYGBge3J9CnNjYWxlc19lZmFfcGFyX2Q0XzQ2IDwtIHNjYWxlX2Z1bihlZmFfcGFyX2Q0XzQ2LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcl9uYW1lcyA9IGZhY3Rvcl9uYW1lc19lZmFfcGFyX2Q0XzQ2KQpzYXZlUkRTKHNjYWxlc19lZmFfcGFyX2Q0XzQ2LCBmaWxlID0gIi4vc3RvcmVkL3NjYWxlcy9zY2FsZXNfZWZhX3Bhcl9kNF80NiIpCgpkNF80Nl9zY29yZWRfNDZfcGFyIDwtIHNjb3JlX2Z1bihkNF80Niwgc2NhbGVzX2VmYV9wYXJfZDRfNDYpCnNhdmVSRFMoZDRfNDZfc2NvcmVkXzQ2X3BhciwgZmlsZSA9ICIuL3N0b3JlZC9zY29yZWRfZGF0YS9kNF80Nl9zY29yZWRfNDZfcGFyIikKYGBgCgpGb2xsb3dpbmcgdGhlIHN0ZXBzIGRlc2NyaWJlZCBpbiAiR2VuZXJhbCBhbmFseXNpcyBwbGFuLCIgYWJvdmUsIHlpZWxkZWQgYHIgZmFjdF9uYW1lX2Z1bihmYWN0b3JfbmFtZXNfZWZhX3Bhcl9kNF80NilgIHNjYWxlcyBvZiBgciBzY2FsZXNfZWZhX3Bhcl9kNF80NiAlPiUgY291bnQoZmFjdG9yKSAlPiUgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKG4pKSAlPiUgc2VsZWN0KG1lYW4pICU+JSBhcy5udW1lcmljKClgIGl0ZW1zIGVhY2g7IHNlZSBUYWJsZSBCLjEuCgojIyMjIFZpc3VhbGl6YXRpb24gYW5kIGFuYWx5c2lzIG9mIGFzeW1tZXRyaWVzCgpgYGB7cn0KcGxvdHNfZDRfNDZfc2NvcmVkXzQ2X3BhciA8LSByZWx2aXpfZnVuKGQ0XzQ2X3Njb3JlZF80Nl9wYXIsIGNvbG9ycyA9IGNvbG9yczAyKQpgYGAKCmBgYHtyfQpmaWdfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9wbG90cyA8LSBwbG90X2dyaWQoCiAgcGxvdHNfZDRfNDZfc2NvcmVkXzQ2X3BhcltbMV1dICsgCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogIHBsb3RzX2Q0XzQ2X3Njb3JlZF80Nl9wYXJbWzJdXSArIAogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICBwbG90c19kNF80Nl9zY29yZWRfNDZfcGFyW1szXV0gKyAKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgbGFiZWxzID0gYygiQTEiLCAiQTIiLCAiQTMiKSwgbmNvbCA9IDMpCgpmaWdfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9sZWcgPC0gZ2V0X2xlZ2VuZCgKICBwbG90c19kNF80Nl9zY29yZWRfNDZfcGFyW1sxXV0gKwogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsIGxlZ2VuZC5kaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIpICsKICAgIHNjYWxlX2ZpbGxfbWFudWFsKCJUYXJnZXQgY2hhcmFjdGVyIiwgCiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBjb2xvcnMwMiwKICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHRpdGxlLnBvc2l0aW9uID0gImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImhvcml6b250YWwiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAyKSkgKwogICAgc2NhbGVfY29sb3JfbWFudWFsKCJUYXJnZXQgY2hhcmFjdGVyIiwKICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBjb2xvcnMwMiwKICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDIpKSkKCmZpZ19kNF80Nl9zY29yZWRfNDZfcGFyX3Bsb3RzX2xlZyA8LSBwbG90X2dyaWQoCiAgZmlnX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfcGxvdHMsIGZpZ19kNF80Nl9zY29yZWRfNDZfcGFyX2xlZywKICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMDUpKQoKZmlnX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfdGl0bGUgPC0gZ2dkcmF3KCkgKyAKICBkcmF3X2xhYmVsKCJTdHVkeSA0OiBDaGlsZHJlbiwgNC02eSAodXNpbmcgdGhlaXIgb3duIHNjYWxlcywgMy1mYWN0b3Igc29sdXRpb24pIiwgc2l6ZSA9IDE2LCBmb250ZmFjZSA9ICdib2xkJywgeCA9IDAsIGhqdXN0ID0gMCkKCmZpZ19kNF80Nl9zY29yZWRfNDZfcGFyX3Bsb3RzX2xlZ190aXRsZSA8LSBwbG90X2dyaWQoCiAgZmlnX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfdGl0bGUsIGZpZ19kNF80Nl9zY29yZWRfNDZfcGFyX3Bsb3RzX2xlZywKICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDAuMTIsIDEpKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMC40fQojIGludGVyaW0gcGxvdCBmb3IgZWFzZSBvZiB3cml0aW5nCmZpZ19kNF80Nl9zY29yZWRfNDZfcGFyX3Bsb3RzX2xlZ190aXRsZQpgYGAKCmBgYHtyfQpkNF80Nl9zY29yZWRfNDZfcGFyX2RpZmYgPC0gZGlmZl9mdW4oZDRfNDZfc2NvcmVkXzQ2X3BhcikKY29udHJhc3RzKGQ0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiRjaGFyYWN0ZXIpIDwtIGNvbnRyYXN0c19zdW1fZWRnZQoKc2F2ZVJEUyhkNF80Nl9zY29yZWRfNDZfcGFyX2RpZmYsICIuL3N0b3JlZC9kaWZmc2NvcmVfZGF0YS9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmYiKQpgYGAKCmBgYHtyfQpwbG90X2Q0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiA8LSBkaWZmcGxvdF9mdW4oZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmLCBjb2xvcnMgPSBjb2xvcnMwMikKYGBgCgpgYGB7cn0KIyByX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9CT0RZX0hFQVJUIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgY2hhcmFjdGVyLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpLAojICAgY29yZXMgPSA0KQojIAojIHNhdmVSRFMocl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfQk9EWV9IRUFSVCwKIyAgICAgICAgICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9CT0RZX0hFQVJUIikKCnJfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0JPRFlfSEVBUlQgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfQk9EWV9IRUFSVCIpCgpzdW1tYXJ5KHJfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0JPRFlfSEVBUlQpCmBgYAoKYGBge3J9CiMgcl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfQk9EWV9NSU5EIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgY2hhcmFjdGVyLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIiksCiMgICBjb3JlcyA9IDQpCiMgCiMgc2F2ZVJEUyhyX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9CT0RZX01JTkQsCiMgICAgICAgICAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfQk9EWV9NSU5EIikKCnJfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0JPRFlfTUlORCA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9CT0RZX01JTkQiKQoKc3VtbWFyeShyX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9CT0RZX01JTkQpCmBgYAoKYGBge3J9CiMgcl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfSEVBUlRfTUlORCA8LSBicm0oCiMgICBkaWZmIH4gMSArIGNoYXJhY3RlciwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfcGFyX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKIyAgIGNvcmVzID0gNCkKIyAKIyBzYXZlUkRTKHJfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0hFQVJUX01JTkQsCiMgICAgICAgICAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfSEVBUlRfTUlORCIpCgpyX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9IRUFSVF9NSU5EIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0hFQVJUX01JTkQiKQoKc3VtbWFyeShyX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9IRUFSVF9NSU5EKQpgYGAKCmBgYHtyfQpyZWd0YWJfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmIDwtIGRpZmZfcmVnX3RhYmxlX2Z1bigKICByZWdfbGlzdCA9IGxpc3Qocl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfQk9EWV9IRUFSVCwKICAgICAgICAgICAgICAgICAgcl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfQk9EWV9NSU5ELAogICAgICAgICAgICAgICAgICByX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9IRUFSVF9NSU5EKSwKICBwYWlyX2xpc3QgPSBjKCJCT0RZIC0gSEVBUlQiLCAiQk9EWSAtIE1JTkQiLCAiSEVBUlQgLSBNSU5EIiksCiAgc3R1ZHlfbmFtZSA9ICJDaGlsZHJlbiwgNC02eSAodXNpbmcgdGhlaXIgb3duIHNjYWxlcywgMy1mYWN0b3Igc29sdXRpb24pIiwKICBjaGFyX2xhYmVsID0gYygiUm9ib3QgdnMuIEdNIikpCmBgYAoKYGBge3J9CiMgaW50ZXJpbSB0YWJsZSBmb3IgZWFzZSBvZiB3cml0aW5nCnJlZ3RhYl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmYgJT4lCiAgc2VsZWN0KC1zdHVkeSwgLXMuZS4pICU+JQogIGZpbHRlcihwYXJhbSA9PSAiSW50ZXJjZXB0IikgJT4lCiAga2FibGUoZGlnaXRzID0gMikgJT4lCiAga2FibGVfc3R5bGluZygpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAwLjR9CiMgaW50ZXJpbSBwbG90IGZvciBlYXNlIG9mIHdyaXRpbmcKcGxvdF9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmYKYGBgCgpWaXN1YWxpemF0aW9ucyBvZiByZWxhdGlvbnNoaXBzIGFtb25nIDQtIHRvIDYteWVhci1vbGQgY2hpbGRyZW4ncyBzY29yZXMgb24gdGhlIF9CT0RZXywgX0hFQVJUXywgYW5kIF9NSU5EXyBzY2FsZXMgYXJlIHByb3ZpZGVkIGluIEZpZ3VyZSBCLnh4LCByb3cgQS4gVGhlIHJlc3VsdHMgb2YgQmF5ZXNpYW4gcmVncmVzc2lvbnMgY29tcGFyaW5nIGRpZmZlcmVuY2Ugc2NvcmVzIGJldHdlZW4gY29uY2VwdHVhbCB1bml0cyB0byB6ZXJvLCBjb250cm9sbGluZyBmb3IgZGlmZmVyZW5jZXMgaW4gYXNzZXNzbWVudHMgb2YgdGhlIHR3byAiZWRnZSBjYXNlcyIgdGhhdCB3ZXJlIGZlYXR1cmVkIGFzIHRhcmdldCBjaGFyYWN0ZXJzIGluIHRoZXNlIHN0dWRpZXMsIGFyZSBwcm92aWRlZCBpbiBUYWJsZSBCLnh4LgoKSW4gdGhlc2UgcmVncmVzc2lvbnMsIG5vbmUgb2YgdGhlIGFzeW1tZXRyaWVzIGJldHdlZW4gY29uY2VwdHVhbCB1bml0cyB3ZXJlIHJlbGlhYmx5IGRpc3Rpbmd1aXNoYWJsZSBmcm9tIHplcm8uCgojIyMgWW91bmdlciBjaGlsZHJlbiAoNC02eSksIHVzaW5nIHRoZWlyIG93biBzY2FsZXMgKGZvdXItZmFjdG9yIHNvbHV0aW9uKQoKIyMjIyBTY2FsZSBjb25zdHJ1Y3Rpb24KCmBgYHtyfQpzY2FsZXNfZWZhX3dkbV9kNF80NiA8LSBzY2FsZV9mdW4oZWZhX3dkbV9kNF80NiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfbmFtZXMgPSBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kNF80NikKc2F2ZVJEUyhzY2FsZXNfZWZhX3dkbV9kNF80NiwgZmlsZSA9ICIuL3N0b3JlZC9zY2FsZXMvc2NhbGVzX2VmYV93ZG1fZDRfNDYiKQoKZDRfNDZfc2NvcmVkXzQ2X3dkbSA8LSBzY29yZV9mdW4oZDRfNDYsIHNjYWxlc19lZmFfd2RtX2Q0XzQ2KQpzYXZlUkRTKGQ0XzQ2X3Njb3JlZF80Nl93ZG0sIGZpbGUgPSAiLi9zdG9yZWQvc2NvcmVkX2RhdGEvZDRfNDZfc2NvcmVkXzQ2X3dkbSIpCmBgYAoKRm9sbG93aW5nIHRoZSBzdGVwcyBkZXNjcmliZWQgaW4gIkdlbmVyYWwgYW5hbHlzaXMgcGxhbiwiIGFib3ZlLCB5aWVsZGVkIGByIGZhY3RfbmFtZV9mdW4oZmFjdG9yX25hbWVzX2VmYV93ZG1fZDRfNDYpYCBzY2FsZXMgb2YgYHIgc2NhbGVzX2VmYV93ZG1fZDRfNDYgJT4lIGNvdW50KGZhY3RvcikgJT4lIHN1bW1hcmlzZShtZWFuID0gbWVhbihuKSkgJT4lIHNlbGVjdChtZWFuKSAlPiUgYXMubnVtZXJpYygpYCBpdGVtcyBlYWNoOyBzZWUgVGFibGUgQi4xLgoKIyMjIyBWaXN1YWxpemF0aW9uIGFuZCBhbmFseXNpcyBvZiBhc3ltbWV0cmllcwoKYGBge3J9CnBsb3RzX2Q0XzQ2X3Njb3JlZF80Nl93ZG0gPC0gcmVsdml6X2Z1bihkNF80Nl9zY29yZWRfNDZfd2RtLCBjb2xvcnMgPSBjb2xvcnMwMikKYGBgCgpgYGB7cn0KZmlnX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fcGxvdHMgPC0gcGxvdF9ncmlkKAogIHBsb3RzX2Q0XzQ2X3Njb3JlZF80Nl93ZG1bWzFdXSArIAogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICBwbG90c19kNF80Nl9zY29yZWRfNDZfd2RtW1syXV0gKyAKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgcGxvdHNfZDRfNDZfc2NvcmVkXzQ2X3dkbVtbM11dICsgCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogIHBsb3RzX2Q0XzQ2X3Njb3JlZF80Nl93ZG1bWzRdXSArIAogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICBwbG90c19kNF80Nl9zY29yZWRfNDZfd2RtW1s1XV0gKyAKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgcGxvdHNfZDRfNDZfc2NvcmVkXzQ2X3dkbVtbNl1dICsgCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogIGxhYmVscyA9IHBhc3RlMCgiQyIsIDE6NiksIG5jb2wgPSAzKQoKZmlnX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fbGVnIDwtIGdldF9sZWdlbmQoCiAgcGxvdHNfZDRfNDZfc2NvcmVkXzQ2X3dkbVtbMV1dICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLCBsZWdlbmQuZGlyZWN0aW9uID0gImhvcml6b250YWwiKSArCiAgICBzY2FsZV9maWxsX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsIAogICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gY29sb3JzMDIsCiAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMikpICsKICAgIHNjYWxlX2NvbG9yX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsCiAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gY29sb3JzMDIsCiAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImhvcml6b250YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAyKSkpCgpmaWdfZDRfNDZfc2NvcmVkXzQ2X3dkbV9wbG90c19sZWcgPC0gcGxvdF9ncmlkKAogIGZpZ19kNF80Nl9zY29yZWRfNDZfd2RtX3Bsb3RzLCBmaWdfZDRfNDZfc2NvcmVkXzQ2X3dkbV9sZWcsCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygxLCAwLjA1KSkKCmZpZ19kNF80Nl9zY29yZWRfNDZfd2RtX3RpdGxlIDwtIGdnZHJhdygpICsgCiAgZHJhd19sYWJlbCgiU3R1ZHkgNDogQ2hpbGRyZW4sIDQtNnkgKHVzaW5nIHRoZWlyIG93biBzY2FsZXMsIDQtZmFjdG9yIHNvbHV0aW9uKSIsIHNpemUgPSAxNiwgZm9udGZhY2UgPSAnYm9sZCcsIHggPSAwLCBoanVzdCA9IDApCgpmaWdfZDRfNDZfc2NvcmVkXzQ2X3dkbV9wbG90c19sZWdfdGl0bGUgPC0gcGxvdF9ncmlkKAogIGZpZ19kNF80Nl9zY29yZWRfNDZfd2RtX3RpdGxlLCBmaWdfZDRfNDZfc2NvcmVkXzQ2X3dkbV9wbG90c19sZWcsCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygwLjEyLCAxKSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDAuN30KIyBpbnRlcmltIHBsb3QgZm9yIGVhc2Ugb2Ygd3JpdGluZwpmaWdfZDRfNDZfc2NvcmVkXzQ2X3dkbV9wbG90c19sZWdfdGl0bGUKYGBgCgpgYGB7cn0KZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmIDwtIGRpZmZfZnVuKGQ0XzQ2X3Njb3JlZF80Nl93ZG0pCmNvbnRyYXN0cyhkNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYkY2hhcmFjdGVyKSA8LSBjb250cmFzdHNfc3VtX2VkZ2UKCnNhdmVSRFMoZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmLCAiLi9zdG9yZWQvZGlmZnNjb3JlX2RhdGEvZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmIikKYGBgCgpgYGB7cn0KcGxvdF9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYgPC0gZGlmZnBsb3RfZnVuKGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiwgY29sb3JzID0gY29sb3JzMDIpCmBgYAoKYGBge3J9CiMgcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW5hdXNlYV9CT0RZb3RoZXIgPC0gYnJtKAojICAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiMgICBkYXRhID0gZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAobmF1c2VhKSAtIEJPRFkgKG90aGVyKSIpLAojICAgY29yZXMgPSA0KQojIAojIHNhdmVSRFMocl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW5hdXNlYV9CT0RZb3RoZXIsCiMgICAgICAgICAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW5hdXNlYV9CT0RZb3RoZXIiKQoKcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW5hdXNlYV9CT0RZb3RoZXIgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW5hdXNlYV9CT0RZb3RoZXIiKQoKc3VtbWFyeShyX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX0JPRFlvdGhlcikKYGBgCgpgYGB7cn0KIyByX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX0hFQVJUIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgY2hhcmFjdGVyLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgKG5hdXNlYSkgLSBIRUFSVCoiKSwKIyAgIGNvcmVzID0gNCkKIyAKIyBzYXZlUkRTKHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFluYXVzZWFfSEVBUlQsCiMgICAgICAgICAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW5hdXNlYV9IRUFSVCIpCgpyX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX0hFQVJUIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFluYXVzZWFfSEVBUlQiKQoKc3VtbWFyeShyX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX0hFQVJUKQpgYGAKCmBgYHtyfQojIHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlvdGhlcl9IRUFSVCA8LSBicm0oCiMgICBkaWZmIH4gMSArIGNoYXJhY3RlciwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIChvdGhlcikgLSBIRUFSVCoiKSwKIyAgIGNvcmVzID0gNCkKIyAKIyBzYXZlUkRTKHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlvdGhlcl9IRUFSVCwKIyAgICAgICAgICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZb3RoZXJfSEVBUlQiKQoKcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW90aGVyX0hFQVJUIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlvdGhlcl9IRUFSVCIpCgpzdW1tYXJ5KHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlvdGhlcl9IRUFSVCkKYGBgCgpgYGB7cn0KIyByX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiMgICBkYXRhID0gZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAobmF1c2VhKSAtIE1JTkQqIiksCiMgICBjb3JlcyA9IDQpCiMgCiMgc2F2ZVJEUyhyX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX01JTkQsCiMgICAgICAgICAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW5hdXNlYV9NSU5EIikKCnJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFluYXVzZWFfTUlORCA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX01JTkQiKQoKc3VtbWFyeShyX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX01JTkQpCmBgYAoKYGBge3J9CiMgcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW90aGVyX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiMgICBkYXRhID0gZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAob3RoZXIpIC0gTUlORCoiKSwKIyAgIGNvcmVzID0gNCkKIyAKIyBzYXZlUkRTKHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlvdGhlcl9NSU5ELAojICAgICAgICAgIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlvdGhlcl9NSU5EIikKCnJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlvdGhlcl9NSU5EIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlvdGhlcl9NSU5EIikKCnN1bW1hcnkocl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW90aGVyX01JTkQpCmBgYAoKYGBge3J9CiMgcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfSEVBUlRfTUlORCA8LSBicm0oCiMgICBkaWZmIH4gMSArIGNoYXJhY3RlciwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCogLSBNSU5EKiIpLAojICAgY29yZXMgPSA0KQojIAojIHNhdmVSRFMocl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfSEVBUlRfTUlORCwKIyAgICAgICAgICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9IRUFSVF9NSU5EIikKCnJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0hFQVJUX01JTkQgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfSEVBUlRfTUlORCIpCgpzdW1tYXJ5KHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0hFQVJUX01JTkQpCmBgYAoKYGBge3J9CnJlZ3RhYl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYgPC0gZGlmZl9yZWdfdGFibGVfZnVuKAogIHJlZ19saXN0ID0gbGlzdChyX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX0JPRFlvdGhlciwKICAgICAgICAgICAgICAgICAgcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW5hdXNlYV9IRUFSVCwKICAgICAgICAgICAgICAgICAgcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW90aGVyX0hFQVJULAogICAgICAgICAgICAgICAgICByX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX01JTkQsCiAgICAgICAgICAgICAgICAgIHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlvdGhlcl9NSU5ELAogICAgICAgICAgICAgICAgICByX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9IRUFSVF9NSU5EKSwKICBwYWlyX2xpc3QgPSBjKCJCT0RZIChuYXVzZWEpIC0gQk9EWSAob3RoZXIpIiwKICAgICAgICAgICAgICAgICJCT0RZIChuYXVzZWEpIC0gSEVBUlQqIiwgIkJPRFkgKG90aGVyKSAtIEhFQVJUKiIsCiAgICAgICAgICAgICAgICAiQk9EWSAobmF1c2VhKSAtIE1JTkQiLCAiQk9EWSAob3RoZXIpIC0gTUlORCIsCiAgICAgICAgICAgICAgICAiSEVBUlQqIC0gTUlORCIpLAogIHN0dWR5X25hbWUgPSAiQ2hpbGRyZW4sIDQtNnkgKHVzaW5nIHRoZWlyIG93biBzY2FsZXMsIDQtZmFjdG9yIHNvbHV0aW9uKSIsCiAgY2hhcl9sYWJlbCA9IGMoIlJvYm90IHZzLiBHTSIpKQpgYGAKCmBgYHtyfQojIGludGVyaW0gdGFibGUgZm9yIGVhc2Ugb2Ygd3JpdGluZwpyZWd0YWJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JQogIHNlbGVjdCgtc3R1ZHksIC1zLmUuKSAlPiUKICBmaWx0ZXIocGFyYW0gPT0gIkludGVyY2VwdCIpICU+JQogIGthYmxlKGRpZ2l0cyA9IDIpICU+JQogIGthYmxlX3N0eWxpbmcoKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMC40fQojIGludGVyaW0gcGxvdCBmb3IgZWFzZSBvZiB3cml0aW5nCnBsb3RfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmCmBgYAoKVmlzdWFsaXphdGlvbnMgb2YgcmVsYXRpb25zaGlwcyBhbW9uZyA0LSB0byA2LXllYXItb2xkIGNoaWxkcmVuJ3Mgc2NvcmVzIG9uIHRoZSBfQk9EWVwqXywgX0hFQVJUXCpfLCBhbmQgX01JTkRfIHNjYWxlcyBhcmUgcHJvdmlkZWQgaW4gRmlndXJlIEIueHgsIHJvdyBCLiBUaGUgcmVzdWx0cyBvZiBCYXllc2lhbiByZWdyZXNzaW9ucyBjb21wYXJpbmcgZGlmZmVyZW5jZSBzY29yZXMgYmV0d2VlbiBjb25jZXB0dWFsIHVuaXRzIHRvIHplcm8sIGNvbnRyb2xsaW5nIGZvciBkaWZmZXJlbmNlcyBpbiBhc3Nlc3NtZW50cyBvZiB0aGUgbmluZSAiZGl2ZXJzZSBjaGFyYWN0ZXJzIiB0aGF0IHdlcmUgZmVhdHVyZWQgYXMgdGFyZ2V0IGNoYXJhY3RlcnMgaW4gdGhlc2Ugc3R1ZGllcywgYXJlIHByb3ZpZGVkIGluIFRhYmxlIEIueHguCgpUaGUgbWFpbiB0YWtlLWF3YXlzIG9mIHRoaXMgYW5hbHlzaXMgYXJlIHRoYXQgNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbiByZWxpYWJseSBlbmRvcnNlZCBfQk9EWSAob3RoZXIpXyBpdGVtcyBtb3JlIHN0cm9uZ2x5IHRoYW4gYW55IG90aGVyIGl0ZW1zLCBidXQgc2hvd2VkIG5vIHJlbGlhYmxlIGFzeW1tZXRyaWVzIGJldHdlZW4gdGhlIHJlbWFpbmluZyBjb25jZXB0dWFsIHVuaXRzIChfQk9EWSAobmF1c2VhKV8sIF9IRUFSVFwqXywgYW5kIF9NSU5EXykuCgojIyMgRGlzY3Vzc2lvbgoKYGBge3J9CmFsdHNjYWxlc19zdHVkeTMgPC0gYmluZF9yb3dzKAogIHNjYWxlc19lZmFfd2RtX2Q0X2FkICU+JSAKICAgIG11dGF0ZShzdHVkeSA9ICJBZHVsdHMiKSwKICBzY2FsZXNfZWZhX3Bhcl9kNF80NiAlPiUKICAgIG11dGF0ZShzdHVkeSA9ICJZb3VuZ2VyIGNoaWxkcmVuLCA0LTZ5ICgzLWZhY3RvciBzb2x1dGlvbikiKSwKICBzY2FsZXNfZWZhX3dkbV9kNF80NiAlPiUKICAgIG11dGF0ZShzdHVkeSA9ICJZb3VuZ2VyIGNoaWxkcmVuLCA0LTZ5ICg0LWZhY3RvciBzb2x1dGlvbikiKSkgJT4lCiAgc2VsZWN0KC1jKGxvYWRpbmcsIG9yZGVyKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBtdXRhdGUoc3R1ZHkgPSBmYWN0b3Ioc3R1ZHksCiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIkFkdWx0cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIllvdW5nZXIgY2hpbGRyZW4sIDQtNnkgKDMtZmFjdG9yIHNvbHV0aW9uKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIllvdW5nZXIgY2hpbGRyZW4sIDQtNnkgKDQtZmFjdG9yIHNvbHV0aW9uKSIpKSkgJT4lCiAgc3ByZWFkKHN0dWR5LCBmYWN0b3IpICU+JQogIG11dGF0ZSh1cl9mYWN0b3IgPSBpZmVsc2UoIWlzLm5hKGBBZHVsdHNgKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgQWR1bHRzYCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoIWlzLm5hKGBZb3VuZ2VyIGNoaWxkcmVuLCA0LTZ5ICgzLWZhY3RvciBzb2x1dGlvbilgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMy1mYWN0b3Igc29sdXRpb24pYCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgWW91bmdlciBjaGlsZHJlbiwgNC02eSAoNC1mYWN0b3Igc29sdXRpb24pYCkpKSAlPiUKICBsZWZ0X2pvaW4oc2NhbGVzX2VmYV93ZG1fZDRfYWQgJT4lIAogICAgICAgICAgICAgIHNlbGVjdChjYXBhY2l0eSwgb3JkZXIpICU+JSByZW5hbWUob3JkZXJfYWQgPSBvcmRlcikpICU+JQogIGxlZnRfam9pbihzY2FsZXNfZWZhX3Bhcl9kNF80NiAlPiUgCiAgICAgICAgICAgICAgc2VsZWN0KGNhcGFjaXR5LCBvcmRlcikgJT4lIHJlbmFtZShvcmRlcl80Nl9wYXIgPSBvcmRlcikpICU+JQogIGxlZnRfam9pbihzY2FsZXNfZWZhX3dkbV9kNF80NiAlPiUgCiAgICAgICAgICAgICAgc2VsZWN0KGNhcGFjaXR5LCBvcmRlcikgJT4lIHJlbmFtZShvcmRlcl80Nl93ZG0gPSBvcmRlcikpICU+JQogIGFycmFuZ2UodXJfZmFjdG9yLCBvcmRlcl9hZCwgb3JkZXJfNDZfcGFyLCBvcmRlcl80Nl93ZG0pICU+JQogIHNlbGVjdCgtYyh1cl9mYWN0b3IsIHN0YXJ0c193aXRoKCJvcmRlciIpKSkKYGBgCgpgYGB7cn0KdGFibGVCLjMgPC0gYWx0c2NhbGVzX3N0dWR5MyAlPiUKICBtdXRhdGVfYWxsKGFzLmNoYXJhY3RlcikgJT4lCiAgIyBkZWFsIHdpdGggeW91bmdlciBjaGlsZHJlbiwgMy1mYWN0b3Igc29sdXRpb24KICBtdXRhdGUodGVtcDEgPSBgWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMy1mYWN0b3Igc29sdXRpb24pYCwKICAgICAgICAgdGVtcDIgPSBnc3ViKCJcXCoiLCAiIiwgdGVtcDEpLAogICAgICAgICB0ZW1wMyA9IGNhc2Vfd2hlbigKICAgICAgICAgICB0ZW1wMiA9PSBgQWR1bHRzYCB+ICLinJMiLAogICAgICAgICAgIGlzLm5hKHRlbXAyKSB+ICIiLAogICAgICAgICAgIFRSVUUgfiB0ZW1wMSkpICU+JQogIG11dGF0ZShgWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMy1mYWN0b3Igc29sdXRpb24pYCA9IHRlbXAzKSAlPiUKICBzZWxlY3QoLXN0YXJ0c193aXRoKCJ0ZW1wIikpICU+JQogICMgZGVhbCB3aXRoIHlvdW5nZXIgY2hpbGRyZW4sIDQtZmFjdG9yIHNvbHV0aW9uCiAgbXV0YXRlKHRlbXAxID0gYFlvdW5nZXIgY2hpbGRyZW4sIDQtNnkgKDQtZmFjdG9yIHNvbHV0aW9uKWAsCiAgICAgICAgIHRlbXAyID0gZ3N1YigiXFwqIiwgIiIsIHRlbXAxKSwKICAgICAgICAgdGVtcDMgPSBjYXNlX3doZW4oCiAgICAgICAgICAgdGVtcDIgPT0gYEFkdWx0c2AgfCAKICAgICAgICAgICAgIHRlbXAyID09IGBZb3VuZ2VyIGNoaWxkcmVuLCA0LTZ5ICgzLWZhY3RvciBzb2x1dGlvbilgIHwKICAgICAgICAgICAgIChpcy5uYShgQWR1bHRzYCkgJiBpcy5uYShgWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMy1mYWN0b3Igc29sdXRpb24pYCkpIH4gIuKckyIsCiAgICAgICAgICAgaXMubmEodGVtcDIpIH4gIiIsCiAgICAgICAgICAgVFJVRSB+IHRlbXAxKSkgJT4lCiAgbXV0YXRlKGBZb3VuZ2VyIGNoaWxkcmVuLCA0LTZ5ICg0LWZhY3RvciBzb2x1dGlvbilgID0gdGVtcDMpICU+JQogIHNlbGVjdCgtc3RhcnRzX3dpdGgoInRlbXAiKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMoYEFkdWx0c2ApLAogICAgICAgICAgICBmdW5zKGlmZWxzZShpcy5uYSguKSwgIiIsICLinJMiKSkpICU+JQogIHJlbmFtZShDYXBhY2l0eSA9IGNhcGFjaXR5LAogICAgICAgICBgNC1mYWN0b3Igc29sdXRpb25gID0gYFlvdW5nZXIgY2hpbGRyZW4sIDQtNnkgKDQtZmFjdG9yIHNvbHV0aW9uKWAsCiAgICAgICAgIGAzLWZhY3RvciBzb2x1dGlvbmAgPSBgWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMy1mYWN0b3Igc29sdXRpb24pYCkgJT4lCiAga2FibGUoZm9ybWF0ID0gImh0bWwiLAogICAgICAgIGNhcHRpb24gPSAiVGFibGUgQi4zOiBTY2FsZXMgZm9yIGVhY2ggb2YgdGhlIGNvbmNlcHR1YWwgdW5pdHMgKGZhY3RvcnMpIGlkZW50aWZpZWQgYnkgRUZBIGZvciBVUyBBZHVsdHMgYW5kIHlvdW5nZXIgY2hpbGRyZW4gaW4gU3R1ZHkgNCAoc2VlIENoYXB0ZXIgSUlJKS4gRm9yIHlvdW5nZXIgY2hpbGRyZW4sIHRoaXMgaW5jbHVkZXMgc2NhbGVzIGZvciBib3RoIHRocmVlLSBhbmQgZm91ci1mYWN0b3IgRUZBIHNvbHV0aW9ucy4gQSBjaGVja21hcmsgaW5kaWNhdGVzIHRoYXQgYSBtZW50YWwgY2FwYWNpdHkgd2FzIGluY2x1ZGVkIGluIGEgc2NhbGUgZm9yIGEgcGFydGljdWxhciBzYW1wbGUuIFRoZSBjb25jZXB0dWFsIHVuaXRzIG9mIHlvdW5nZXIgY2hpbGRyZW4gaW4gdGhlIGZvdXItZmFjdG9yIHNvbHV0aW9uIGRpZmZlcmVkIHN1YnN0YW50aWFsbHkgZnJvbSB0aG9zZSBvZiBhZHVsdHMsIHN1Y2ggdGhhdCBzb21lIG1lbnRhbCBjYXBhY2l0aWVzIHdlcmUgaW5jbHVkZWQgaW4gZGlmZmVyZW50IHNjYWxlcyBhY3Jvc3MgYWdlIGdyb3Vwcy4gSW4gdGhlc2UgY2FzZXMsIHRoZSBuYW1lIG9mIHRoZSBzY2FsZSBpcyBwcm92aWRlZCAocmF0aGVyIHRoYW4gYSBjaGVja21hcmspLiIpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJCT0RZIHNjYWxlIiwgMSwgNSkgJT4lCiAgZ3JvdXBfcm93cygiSEVBUlQgc2NhbGUiLCA2LCAxMCkgJT4lCiAgZ3JvdXBfcm93cygiTUlORCBzY2FsZSIsIDExLCAxNSkgJT4lCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIiA9IDIsCiAgICAgICAgICAgICAgICAgICAgICJZb3VuZ2VyIGNoaWxkcmVuLCA0LTZ5IiA9IDIpKQpgYGAKCmBgYHtyIHRhYmxlQi4zLCBpbmNsdWRlID0gVH0KdGFibGVCLjMKYGBgCgpgYGB7cn0KZmlndXJlQi4zIDwtIHBsb3RfZ3JpZChmaWdfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9wbG90c19sZWdfdGl0bGUsCiAgICAgICAgICAgICAgICAgICAgICAgZmlnX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fcGxvdHNfbGVnX3RpdGxlLAogICAgICAgICAgICAgICAgICAgICAgIHJlbF9oZWlnaHRzID0gYygxLCAyKSwgbmNvbCA9IDEpCgpmaWd1cmVCLjNfY2FwIDwtIGFkZF9zdWIoZmlndXJlQi4zLCBzdHJfd3JhcCgiRmlndXJlIEIuMzogUmVsYXRpb25zaGlwcyBhbW9uZyB5b3VuZ2VyIGNoaWxkcmVuJ3MgYXR0cmlidXRpb25zIG9mIGNvbmNlcHR1YWwgdW5pdHMgaW4gU3R1ZHkgNCwgc2NvcmVkIHVzaW5nIHRoZWlyIG93biBzY2FsZXMgKHNlZSBUYWJsZSBCLjMpLiBUd28gc2V0cyBvZiBzY29yZXMgYXJlIHByZXNlbnRlZDogdXNpbmcgYSB0aHJlZS1mYWN0b3IgRUZBIHNvbHV0aW9uIChBMS1BMykgYW5kIHVzaW5nIGEgZm91ci1mYWN0b3IgRUZBIHNvbHV0aW9uIChCMS1CNikuIFBsb3RzIGFyZSBvcmdhbml6ZWQgYnkgc2FtcGxlIGFuZCBzY2FsZSB1c2VkIChyb3dzKSBhbmQgYnkgcGFpciBvZiBjb25jZXB0dWFsIHVuaXRzIChjb2x1bW5zKS4gRm9yIGVhY2ggY29uY2VwdHVhbCB1bml0LCBzY29yZXMgY291bGQgcmFuZ2UgZnJvbSAwLTEuIEluZGl2aWR1YWwgcGFydGljaXBhbnRzIGFyZSBwbG90dGVkIGFzIHNtYWxsLCB0cmFuc2x1Y2VudCBjaXJjbGVzLCBhbmQgbWVhbiBzY29yZXMgYnkgY2hhcmFjdGVyIGFyZSBwbG90dGVkIGFzIGxhcmdlciwgc29saWQgZGlhbW9uZHMuIEVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgY29uZmlkZW5jZSBpbnRlcnZhbHMuIFRoZSBkb3R0ZWQgbGluZSBjb3JyZXNwb25kcyB0byBlcXVhbCBlbmRvcnNlbWVudHMgb2YgdGhlIHR3byBjb25jZXB0dWFsIHVuaXRzIHBsb3R0ZWQuIiwgMTEwKSwgeCA9IDAsIGhqdXN0ID0gMCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAxLjR9CmdnZHJhdyhmaWd1cmVCLjNfY2FwKQpgYGAKCmBgYHtyfQpmaWd1cmVCLjRfcGxvdHMgPC0gcGxvdF9ncmlkKAogIHBsb3RfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmICsgCiAgICBsYWJzKHRpdGxlID0gIlN0dWR5IDQ6IENoaWxkcmVuLCA0LTZ5XG4oc2NvcmVkIHVzaW5nIHRoZWlyIG93biBzY2FsZXMsIDMtZmFjdG9yIHNvbHV0aW9uKSIpICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksIAogIHBsb3RfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICsgCiAgICBsYWJzKHRpdGxlID0gIlN0dWR5IDQ6IENoaWxkcmVuLCA0LTZ5XG4oc2NvcmVkIHVzaW5nIHRoZWlyIG93biBzY2FsZXMsIDQtZmFjdG9yIHNvbHV0aW9uKSIpICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksIAogIG5jb2wgPSAyLCByZWxfd2lkdGhzID0gYygxLCAyKSwKICBsYWJlbHMgPSAiQVVUTyIpCgpmaWd1cmVCLjRfcGxvdHNfbGVnIDwtIHBsb3RfZ3JpZChmaWd1cmVCLjRfcGxvdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9sZWdlbmQocGxvdF9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMSkpCgpmaWd1cmVCLjRfY2FwIDwtIGFkZF9zdWIoZmlndXJlQi40X3Bsb3RzX2xlZywgc3RyX3dyYXAoIkZpZ3VyZSBCLjQ6IERpZmZlcmVuY2Ugc2NvcmVzIGJldHdlZW4gNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbidzIGF0dHJpYnV0aW9ucyBvZiBjb25jZXB0dWFsIHVuaXRzIGluIFN0dWR5IDQsIHVzaW5nIHRoZWlyIG93biBzY2FsZXMuIFRoaXMgaW5jbHVkZXMgZGlmZmVyZW5jZSBzY29yZXMgdXNpbmcgdGhlIGZvdXItZmFjdG9yIEVGQSBzb2x1dGlvbiAocGFuZWwgQSkgYW5kIGRpZmZlcmVuY2Ugc2NvcmVzIHVzaW5nIHRoZSB0aHJlZS1mYWN0b3Igc29sdXRpb24gKHBhbmVsIEI7IHNlZSBUYWJsZSBCLjMpLiBGb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQsIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAtMSwgc3VjaCB0aGF0IGRpZmZlcmVuY2Ugc2NvcmVzIGNvdWxkIHJhbmdlIGZyb20gLTEgdG8gKzEuIEluZGl2aWR1YWwgcGFydGljaXBhbnRzIGFyZSBwbG90dGVkIGFzIHNtYWxsLCB0cmFuc2x1Y2VudCBjaXJjbGVzLCBhbmQgbWVhbiBkaWZmZXJlbmNlIHNjb3JlcyBieSBjaGFyYWN0ZXIgYXJlIHBsb3R0ZWQgYXMgbGFyZ2VyLCBzb2xpZCBkaWFtb25kcy4gRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscy4gVGhlIGRvdHRlZCBsaW5lIGNvcnJlc3BvbmRzIHRvIGVxdWFsIGVuZG9yc2VtZW50cyBvZiB0aGUgdHdvIGNvbmNlcHR1YWwgdW5pdHMgcGxvdHRlZCAoaS5lLiwgYSBkaWZmZXJlbmNlIHNjb3JlIG9mIDApLiIsIDE4MCksIHggPSAwLCBoanVzdCA9IDApCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA4LCBmaWcuYXNwID0gMC4zOH0KZ2dkcmF3KGZpZ3VyZUIuNF9jYXApCmBgYAoKCiMgQWdlLXJlbGF0ZWQgY2hhbmdlcyBpbiBkaWZmZXJlbmNlIHNjb3JlcyBiZXR3ZWVuIGNvbmNlcHR1YWwgdW5pdHMKClhYIF9fQ09OVkVSVCBUTyBCUk1TX18KCiMjIFN0dWR5IDIKCmBgYHtyfQpkMl83OV9zY29yZWRfYWRfZGlmZiAlPiUgCiAgbGVmdF9qb2luKGQyXzc5ICU+JSBkaXN0aW5jdChzdWJpZCwgYWdlKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYWdlLCB5ID0gZGlmZiwgY29sb3IgPSBjaGFyYWN0ZXIpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgbHR5ID0gMikgKwogIGZhY2V0X3dyYXAofiBwYWlyKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNSkgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gZDJfYWRfc2NvcmVkX2FkX2RpZmYgJT4lCiAgICAgICAgICAgICAgICAgICAgZ3JvdXBfYnkocGFpcikgJT4lCiAgICAgICAgICAgICAgICAgICAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAiZGlmZiIpICU+JQogICAgICAgICAgICAgICAgICAgIHVuZ3JvdXAoKSAlPiUKICAgICAgICAgICAgICAgICAgICBtdXRhdGUoYWdlID0gMTEpLAogICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyLCBjb2xvciA9IE5VTEwpLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNoYXBlID0gImRpYW1vbmQiKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGNvbG9yczAyKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IGMoNzoxMSksIG1pbm9yX2JyZWFrcyA9IE5VTEwsCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMocGFzdGUwKDc6MTAsICJ5IiksICJBZHVsdHMiKSkgKwogIGdlb21fc21vb3RoKGNvbG9yID0gImJsYWNrIiwgbWV0aG9kID0gImxtIikgKwogIGxhYnModGl0bGUgPSAiU3R1ZHkgMjogRGlmZmVyZW5jZSBzY29yZXMgb3ZlciBhZ2UiLAogICAgICAgeCA9ICJBZ2UgKHkpIiwgeSA9ICJEaWZmZXJlbmNlIHNjb3JlIiwgY29sb3IgPSAiVGFyZ2V0IGNoYXJhY3RlciIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpCmBgYAoKYGBge3J9CnRlbXBfZDJfQkggPC0gbG0oZGlmZiB+IDEgKyBjaGFyYWN0ZXIgKiBhZ2UsCiAgICAgICAgICAgICAgICAgZGF0YSA9IGQyXzc5X3Njb3JlZF9hZF9kaWZmICU+JQogICAgICAgICAgICAgICAgICAgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpICU+JQogICAgICAgICAgICAgICAgICAgbGVmdF9qb2luKGQyXzc5ICU+JSBkaXN0aW5jdChzdWJpZCwgYWdlKSkgJT4lCiAgICAgICAgICAgICAgICAgICBtdXRhdGUoYWdlID0gc2NhbGUoYWdlLCBzY2FsZSA9IEYpKSkKc3VtbWFyeSh0ZW1wX2QyX0JIKSRjb2VmZmljaWVudHMgJT4lIGthYmxlKGRpZ2l0cyA9IDIpICU+JSBrYWJsZV9zdHlsaW5nKCkKCnRlbXBfZDJfQk0gPC0gbG0oZGlmZiB+IDEgKyBjaGFyYWN0ZXIgKiBhZ2UsCiAgICAgICAgICAgICAgICAgZGF0YSA9IGQyXzc5X3Njb3JlZF9hZF9kaWZmICU+JQogICAgICAgICAgICAgICAgICAgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIikgJT4lCiAgICAgICAgICAgICAgICAgICBsZWZ0X2pvaW4oZDJfNzkgJT4lIGRpc3RpbmN0KHN1YmlkLCBhZ2UpKSAlPiUKICAgICAgICAgICAgICAgICAgIG11dGF0ZShhZ2UgPSBzY2FsZShhZ2UsIHNjYWxlID0gRikpKQpzdW1tYXJ5KHRlbXBfZDJfQk0pJGNvZWZmaWNpZW50cyAlPiUga2FibGUoZGlnaXRzID0gMikgJT4lIGthYmxlX3N0eWxpbmcoKQoKdGVtcF9kMl9ITSA8LSBsbShkaWZmIH4gMSArIGNoYXJhY3RlciAqIGFnZSwKICAgICAgICAgICAgICAgICBkYXRhID0gZDJfNzlfc2NvcmVkX2FkX2RpZmYgJT4lCiAgICAgICAgICAgICAgICAgICBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIikgJT4lCiAgICAgICAgICAgICAgICAgICBsZWZ0X2pvaW4oZDJfNzkgJT4lIGRpc3RpbmN0KHN1YmlkLCBhZ2UpKSAlPiUKICAgICAgICAgICAgICAgICAgIG11dGF0ZShhZ2UgPSBzY2FsZShhZ2UsIHNjYWxlID0gRikpKQpzdW1tYXJ5KHRlbXBfZDJfSE0pJGNvZWZmaWNpZW50cyAlPiUga2FibGUoZGlnaXRzID0gMikgJT4lIGthYmxlX3N0eWxpbmcoKQpgYGAKCiMjIFN0dWR5IDMKCmBgYHtyfQpkM183OV9zY29yZWRfYWRfZGlmZiAlPiUgCiAgbGVmdF9qb2luKGQzXzc5ICU+JSBkaXN0aW5jdChzdWJpZCwgYWdlKSkgJT4lCiAgZnVsbF9qb2luKGQzXzQ2X3Njb3JlZF9hZF9kaWZmICU+JQogICAgICAgICAgICAgIGxlZnRfam9pbihkM180NiAlPiUgZGlzdGluY3Qoc3ViaWQsIGFnZSkpKSAlPiUKICAjIE5PVEU6IE1JU1NJTkcgMzUgQUdFUyEhCiAgZ2dwbG90KGFlcyh4ID0gYWdlLCB5ID0gZGlmZiwgY29sb3IgPSBjaGFyYWN0ZXIpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgbHR5ID0gMikgKwogIGZhY2V0X3dyYXAofiBwYWlyKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNSkgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gZDNfYWRfc2NvcmVkX2FkX2RpZmYgJT4lCiAgICAgICAgICAgICAgICAgICAgZ3JvdXBfYnkocGFpcikgJT4lCiAgICAgICAgICAgICAgICAgICAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAiZGlmZiIpICU+JQogICAgICAgICAgICAgICAgICAgIHVuZ3JvdXAoKSAlPiUKICAgICAgICAgICAgICAgICAgICBtdXRhdGUoYWdlID0gMTEpLAogICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyLCBjb2xvciA9IE5VTEwpLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNoYXBlID0gImRpYW1vbmQiKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGNvbG9yczA5KSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IGMoNDoxMSksIG1pbm9yX2JyZWFrcyA9IE5VTEwsCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMocGFzdGUwKDQ6MTAsICJ5IiksICJBZHVsdHMiKSkgKwogIGdlb21fc21vb3RoKGNvbG9yID0gImJsYWNrIiwgbWV0aG9kID0gImxtIikgKwogIGxhYnModGl0bGUgPSAiU3R1ZHkgMzogRGlmZmVyZW5jZSBzY29yZXMgb3ZlciBhZ2UiLAogICAgICAgeCA9ICJBZ2UgKHkpIiwgeSA9ICJEaWZmZXJlbmNlIHNjb3JlIiwgY29sb3IgPSAiVGFyZ2V0IGNoYXJhY3RlciIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpCmBgYAoKYGBge3J9CnRlbXBfZDNfQkggPC0gbG0oZGlmZiB+IDEgKyBjaGFyYWN0ZXIgKiBhZ2UsCiAgICAgICAgICAgICAgICAgZGF0YSA9IGQzXzc5X3Njb3JlZF9hZF9kaWZmICU+JQogICAgICAgICAgICAgICAgICAgbGVmdF9qb2luKGQzXzc5ICU+JSBkaXN0aW5jdChzdWJpZCwgYWdlKSkgJT4lCiAgICAgICAgICAgICAgICAgICBmdWxsX2pvaW4oZDNfNDZfc2NvcmVkX2FkX2RpZmYgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0X2pvaW4oZDNfNDYgJT4lIGRpc3RpbmN0KHN1YmlkLCBhZ2UpKSkgJT4lCiAgICAgICAgICAgICAgICAgICBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIikgJT4lCiAgICAgICAgICAgICAgICAgICBtdXRhdGUoYWdlID0gc2NhbGUoYWdlLCBzY2FsZSA9IEYpKSkKc3VtbWFyeSh0ZW1wX2QzX0JIKSRjb2VmZmljaWVudHMgJT4lIGthYmxlKGRpZ2l0cyA9IDIpICU+JSBrYWJsZV9zdHlsaW5nKCkKCnRlbXBfZDNfQk0gPC0gbG0oZGlmZiB+IDEgKyBjaGFyYWN0ZXIgKiBhZ2UsCiAgICAgICAgICAgICAgICAgZGF0YSA9IGQzXzc5X3Njb3JlZF9hZF9kaWZmICU+JQogICAgICAgICAgICAgICAgICAgbGVmdF9qb2luKGQzXzc5ICU+JSBkaXN0aW5jdChzdWJpZCwgYWdlKSkgJT4lCiAgICAgICAgICAgICAgICAgICBmdWxsX2pvaW4oZDNfNDZfc2NvcmVkX2FkX2RpZmYgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0X2pvaW4oZDNfNDYgJT4lIGRpc3RpbmN0KHN1YmlkLCBhZ2UpKSkgJT4lCiAgICAgICAgICAgICAgICAgICBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSAlPiUKICAgICAgICAgICAgICAgICAgIG11dGF0ZShhZ2UgPSBzY2FsZShhZ2UsIHNjYWxlID0gRikpKQpzdW1tYXJ5KHRlbXBfZDNfQk0pJGNvZWZmaWNpZW50cyAlPiUga2FibGUoZGlnaXRzID0gMikgJT4lIGthYmxlX3N0eWxpbmcoKQoKdGVtcF9kM19ITSA8LSBsbShkaWZmIH4gMSArIGNoYXJhY3RlciAqIGFnZSwKICAgICAgICAgICAgICAgICBkYXRhID0gZDNfNzlfc2NvcmVkX2FkX2RpZmYgJT4lCiAgICAgICAgICAgICAgICAgICBsZWZ0X2pvaW4oZDNfNzkgJT4lIGRpc3RpbmN0KHN1YmlkLCBhZ2UpKSAlPiUKICAgICAgICAgICAgICAgICAgIGZ1bGxfam9pbihkM180Nl9zY29yZWRfYWRfZGlmZiAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRfam9pbihkM180NiAlPiUgZGlzdGluY3Qoc3ViaWQsIGFnZSkpKSAlPiUKICAgICAgICAgICAgICAgICAgIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSAlPiUKICAgICAgICAgICAgICAgICAgIG11dGF0ZShhZ2UgPSBzY2FsZShhZ2UsIHNjYWxlID0gRikpKQpzdW1tYXJ5KHRlbXBfZDNfSE0pJGNvZWZmaWNpZW50cyAlPiUga2FibGUoZGlnaXRzID0gMikgJT4lIGthYmxlX3N0eWxpbmcoKQpgYGAKCiMjIFN0dWR5IDQKCmBgYHtyfQpkNF80Nl9zY29yZWRfYWRfZGlmZiAlPiUgCiAgbGVmdF9qb2luKGQ0XzQ2ICU+JSBkaXN0aW5jdChzdWJpZCwgYWdlKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYWdlLCB5ID0gZGlmZiwgY29sb3IgPSBjaGFyYWN0ZXIpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgbHR5ID0gMikgKwogIGZhY2V0X3dyYXAofiBwYWlyKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNSkgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gZDRfYWRfc2NvcmVkX2FkX2RpZmYgJT4lCiAgICAgICAgICAgICAgICAgICAgZ3JvdXBfYnkocGFpcikgJT4lCiAgICAgICAgICAgICAgICAgICAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAiZGlmZiIpICU+JQogICAgICAgICAgICAgICAgICAgIHVuZ3JvdXAoKSAlPiUKICAgICAgICAgICAgICAgICAgICBtdXRhdGUoYWdlID0gNiksCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIsIGNvbG9yID0gTlVMTCksCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2hhcGUgPSAiZGlhbW9uZCIpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gY29sb3JzMDIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gYyg0OjYpLCBtaW5vcl9icmVha3MgPSBOVUxMLAogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKHBhc3RlMCg0OjUsICJ5IiksICJBZHVsdHMiKSkgKwogIGdlb21fc21vb3RoKGNvbG9yID0gImJsYWNrIiwgbWV0aG9kID0gImxtIikgKwogIGxhYnModGl0bGUgPSAiU3R1ZHkgNDogRGlmZmVyZW5jZSBzY29yZXMgb3ZlciBhZ2UiLAogICAgICAgeCA9ICJBZ2UgKHkpIiwgeSA9ICJEaWZmZXJlbmNlIHNjb3JlIiwgY29sb3IgPSAiVGFyZ2V0IGNoYXJhY3RlciIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpCmBgYAoKYGBge3J9CnRlbXBfZDRfQkggPC0gbG1lcihkaWZmIH4gMSArIGNoYXJhY3RlciAqIGFnZSArICgxIHwgc3ViaWQpLAogICAgICAgICAgICAgICAgICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF9hZF9kaWZmICU+JQogICAgICAgICAgICAgICAgICAgICBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIikgJT4lCiAgICAgICAgICAgICAgICAgICAgIGxlZnRfam9pbihkNF80NiAlPiUgZGlzdGluY3Qoc3ViaWQsIGFnZSkpICU+JQogICAgICAgICAgICAgICAgICAgICBtdXRhdGUoYWdlID0gc2NhbGUoYWdlLCBzY2FsZSA9IEYpKSkKc3VtbWFyeSh0ZW1wX2Q0X0JIKSRjb2VmZmljaWVudHMgJT4lIGthYmxlKGRpZ2l0cyA9IDIpICU+JSBrYWJsZV9zdHlsaW5nKCkKCnRlbXBfZDRfQk0gPC0gbG1lcihkaWZmIH4gMSArIGNoYXJhY3RlciAqIGFnZSArICgxIHwgc3ViaWQpLAogICAgICAgICAgICAgICAgICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF9hZF9kaWZmICU+JQogICAgICAgICAgICAgICAgICAgICBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSAlPiUKICAgICAgICAgICAgICAgICAgICAgbGVmdF9qb2luKGQ0XzQ2ICU+JSBkaXN0aW5jdChzdWJpZCwgYWdlKSkgJT4lCiAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShhZ2UgPSBzY2FsZShhZ2UsIHNjYWxlID0gRikpKQpzdW1tYXJ5KHRlbXBfZDRfQk0pJGNvZWZmaWNpZW50cyAlPiUga2FibGUoZGlnaXRzID0gMikgJT4lIGthYmxlX3N0eWxpbmcoKQoKdGVtcF9kNF9ITSA8LSBsbWVyKGRpZmYgfiAxICsgY2hhcmFjdGVyICogYWdlICsgKDEgfCBzdWJpZCksCiAgICAgICAgICAgICAgICAgICBkYXRhID0gZDRfNDZfc2NvcmVkX2FkX2RpZmYgJT4lCiAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSAlPiUKICAgICAgICAgICAgICAgICAgICAgbGVmdF9qb2luKGQ0XzQ2ICU+JSBkaXN0aW5jdChzdWJpZCwgYWdlKSkgJT4lCiAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShhZ2UgPSBzY2FsZShhZ2UsIHNjYWxlID0gRikpKQpzdW1tYXJ5KHRlbXBfZDRfSE0pJGNvZWZmaWNpZW50cyAlPiUga2FibGUoZGlnaXRzID0gMikgJT4lIGthYmxlX3N0eWxpbmcoKQpgYGAKCiMgVGhlIGpvaW50IGRlcGVuZGVuY3kgb2YgSEVBUlQgb24gYm90aCBCT0RZIGFuZCBNSU5ECgpBIHBhcnRpY3VsYXJseSByb2J1c3QgYW5kIHJlbGlhYmxlIGZpbmRpbmcgcmVwb3J0ZWQgaW4gdGhlIG1haW4gdGV4dCBvZiBDaGFwdGVyIElWIHdhcyB0aGF0IFVTIGFkdWx0cyB2aXJ0dWFsbHkgbmV2ZXIgZW5kb3JzZWQgSEVBUlQgbW9yZSBzdHJvbmdseSB0aGFuIGVpdGhlciBCT0RZIG9yIE1JTkQuIChVUyBjaGlsZHJlbiBiZXR3ZWVuIHRoZSBhZ2VzIG9mIDQtOXkgYWxzbyBkZW1vbnN0cmF0ZWQgaW5jcmVhc2luZ2x5IGFkdWx0LWxpa2UgYXN5bW1ldHJpZXMgaW4gdGhlaXIgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIGF0dHJpYnV0aW9ucyB3aXRoIGFnZS4pIEkgYXJndWVkIGluIHRoYXQgY2hhcHRlciB0aGF0IHRoaXMgcGF0dGVybiBvZiBmaW5kaW5ncyBpcyBjb25zaXRlbnQgd2l0aCB0aGUgcG9zc2liaWxpdHkgdGhhdCBhZHVsdHMnIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMgYXJlIGdvdmVybmVkIGJ5IGFuIGludHVpdGl2ZSB0aGVvcnkgb2YgbWVudGFsIGxpZmUgc3BlY2lmeWluZyB0aGF0LCBpbiBvcmRlciBmb3IgYSBiZWluZyB0byBoYXZlIHRoZSBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcyBvZiB0aGUgSEVBUlQsIGl0IG11c3QgYWxzbyBoYXZlIHRoZSBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMgb2YgdGhlIEJPRFkgX2FuZF8gdGhlIHBlcmNlcHR1YWwtY29nbml0aXZlIGFiaWxpdGllcyBvZiB0aGUgbWluZC4KCkhlcmUsIEkgcHJvdmlkZSBzb21lIHByZWxpbWluYXJ5IGV2aWRlbmNlIGZvciB0aGUgImFuZCIgaW4gdGhhdCBjbGFpbSwgYnkgd2F5IG9mIGEgcmUtdmlzdWFsaXphdGlvbiBvZiBwYXJ0aWNpcGFudHMnIF9CT0RZXywgX0hFQVJUXywgYW5kIF9NSU5EXyBzY29yZXMuIFRoZSBsb2dpYyBoZXJlIGlzIHRoYXQgaWYsIGFzIGEgZ3JvdXAsIGEgc2FtcGxlIG9mIHBhcnRpY2lwYW50cyBob2xkcyB0aGUgdGhlb3J5IHRoYXQgSEVBUlQgcmVxdWlyZXMgYSBjb21iaW5hdGlvbiBvZiBCT0RZIF9hbmRfIE1JTkQsIHRoZW4gc3Ryb25nIGVuZG9yc2VtZW50cyBvZiBfSEVBUlRfIGFiaWxpdGllcyAoZGVwaWN0ZWQgaGVyZSBpbiBvcmFuZ2VzIGFuZCByZWRzKSBzaG91bGQgb25seSBvY2N1ciBhbW9uZyBwYXJ0aWNpcGFudHMgd2hvIGFsc28gZ2F2ZSBzdHJvbmcgZW5kb3JzZW1lbnRzIG9mIF9ib3RoXyBfQk9EWV8gYW5kIF9NSU5EXyBhYmlsaXRpZXMgKHBsb3R0ZWQgaGVyZSBpbiB0aGUgdXBwZXIgcmlnaHQgY29ybmVyIG9mIGVhY2ggcGxvdCkuCgpUaGlzIGlzLCBpbmRlZWQsIHdoYXQgSSBvYnNlcnZlIGFtb25nIGFkdWx0cyBhY3Jvc3MgU3R1ZGllcyAxLTQgKHNlZSBGaWd1cmUgQi54eCwgdG9wIHJvdykuIFRoaXMgdGVuZGVuY3kgaXMgbGVzcyBjbGVhciBhbW9uZyA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIChtaWRkbGUgcm93KSBhbmQgNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbiAoYm90dG9tIHJvdykuCgpgYGB7cn0KZmlndXJlQi54eF9wbG90IDwtIGJpbmRfcm93cygKICBkMWFfYWRfc2NvcmVkX2FkLCBkMWJfYWRfc2NvcmVkX2FkLCBkMWNfYWRfc2NvcmVkX2FkLCBkMWRfYWRfc2NvcmVkX2FkLAogIGQyX2FkX3Njb3JlZF9hZCwgZDJfNzlfc2NvcmVkX2FkLAogIGQzX2FkX3Njb3JlZF9hZCwgZDNfNzlfc2NvcmVkX2FkLCBkM180Nl9zY29yZWRfYWQsCiAgZDRfYWRfc2NvcmVkX2FkLCBkNF80Nl9zY29yZWRfYWQpICU+JQogIG11dGF0ZShzdHVkeSA9IGdzdWIoIjouKiQiLCAiIiwgc3R1ZHkpLAogICAgICAgICBhZ2VfZ3JvdXAgPSByZWNvZGVfZmFjdG9yKGFnZV9ncm91cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWR1bHRzIiA9ICJBZHVsdHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGlsZHJlbjc5IiA9ICJDaGlsZHJlbiwgNy05eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoaWxkcmVuNDYiID0gIkNoaWxkcmVuLCA0LTZ5IikpICU+JQogICMgZ3JvdXBfYnkoc3R1ZHksIGFnZV9ncm91cCkgJT4lICMgc3RhbmRhcmRpemUgc2NvcmVzIHdpdGhpbiBzYW1wbGUgKHBhcnQgMSBvZiAyKQogICMgbXV0YXRlKHNjb3JlID0gc2NhbGUoc2NvcmUpKSAlPiUgIyBzdGFuZGFyZGl6ZSBzY29yZXMgd2l0aGluIHNhbXBsZSAocGFydCAyIG9mIDIpCiAgc3ByZWFkKGZhY3Rvciwgc2NvcmUpICU+JQogICMgZmlsdGVyKEJPRFkgIT0gMCwgTUlORCAhPSAwLCBIRUFSVCAhPSAwKSAlPiUgIyBvbWl0IGFueSBwYXJ0aWNpcGFudCB3aXRoIGFueSBzY29yZSBvZiAwCiAgYXJyYW5nZShIRUFSVCkgJT4lICMgcHV0IGhpZ2hlc3QgSEVBUlQgb24gdG9wCiAgZ2dwbG90KGFlcyh4ID0gQk9EWSwgeSA9IE1JTkQsIGNvbG9yID0gSEVBUlQpKSArCiAgZmFjZXRfZ3JpZChhZ2VfZ3JvdXAgfiBzdHVkeSkgKwogIGdlb21faml0dGVyKHdpZHRoID0gMC4wNSwgaGVpZ2h0ID0gMC4wNSwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfY29sb3JfZGlzdGlsbGVyKHBhbGV0dGUgPSAiU3BlY3RyYWwiLCAKICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJ3aWR0aCA9IDMwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhcmhlaWdodCA9IDEpKSArCiAgbGFicyh4ID0gIkJPRFkgc2NvcmUiLCB5ID0gIk1JTkQgc2NvcmUiLCBjb2xvciA9ICJIRUFSVCBzY29yZSIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpCmBgYAoKYGBge3J9CmZpZ3VyZUIueHhfY2FwIDwtIGFkZF9zdWIoZmlndXJlQi54eF9wbG90LCBzdHJfd3JhcCgiRmlndXJlIEIueHg6IFBhcnRpY2lwYW50cycgZW5kb3JzZW1lbnRzIG9mIEhFQVJUIGFzIGEgZnVuY3Rpb24gb2YgdGhlaXIgam9pbnQgQk9EWSBhbmQgTUlORCBlbmRvcnNlbWVudHMuIFJlc3VsdHMgZnJvbSBhbGwgc2FtcGxlcywgaW4gYWxsIHN0dWRpZXMsIGFyZSBwbG90dGVkIGhlcmUsIHVzaW5nIGFkdWx0cycgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIHNjYWxlcyBmb3IgYWxsIHNhbXBsZXMuIEZvciBlYWNoIGNvbmNlcHR1YWwgdW5pdCwgc2NvcmVzIGNvdWxkIHJhbmdlIGZyb20gMC0xLCBzdWNoIHRoYXQgZGlmZmVyZW5jZSBzY29yZXMgY291bGQgcmFuZ2UgZnJvbSAtMSB0byArMS4gSWYgZW5kb3JzZW1lbnRzIG9mIEhFQVJUIGRlcGVuZCBqb2ludGx5IG9uIGVuZG9yc2VtZW50cyBvZiBib3RoIEJPRFkgYW5kIE1JTkQsIHRoZW4gcmVkIGRvdHMgKHN0cm9uZyBIRUFSVCBlbmRvcnNlbWVudHMpIHNob3VsZCBvY2N1ciBvbmx5IGluIHRoZSB1cHBlciByaWdodCBjb3JuZXIgb2YgZWFjaCBwbG90LiIsIDEyMCksIHggPSAwLCBoanVzdCA9IDApCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC42NX0KZ2dkcmF3KGZpZ3VyZUIueHhfY2FwKQpgYGAK